spagetti kodi
Strukturaviy dasturlash, xususan, kodni o'qishdagi qiyinchiliklar, tizimlashtirilmagan, dasturning dastlabki matnini idrok etish va tahlil qilish uchun noqulay bo'lgan dasturlardagi tartibsizlik va xatolarni bartaraf etish uchun mo'ljallangan. Bunday matn ko'pincha "spagetti kodi" sifatida tavsiflanadi.
Spagetti kodini disk raskadrovka qilish va to'g'ri va yuqori unumdorlik bilan ishlatish mumkin, ammo uni saqlash va rivojlantirish juda qiyin. Spagetti kodini yangi funksiyalarni qo'shish uchun tozalash ba'zan yangi xatolarni kiritish uchun katta potentsialga ega. Shu sababli, bu deyarli muqarrar refaktoringga aylanadi (kod-refaktoring) - spagetti uchun asosiy davo.
o'tish bayonoti
1970-yillardan beri shartsiz o'tish operatori Goto tizimli va o'sib borayotgan tanqid markazida bo'ldi. Dasturning dastlabki kodida goto operatoridan noto'g'ri va o'ylamasdan foydalanish chalkash, o'qib bo'lmaydigan "spagetti kodi" ga olib keladi. Bunday kod matnidan bajarilish tartibi va fragmentlarning o'zaro bog'liqligini tushunish deyarli mumkin emas.
Bu nuqtai nazar birinchi marta Edsger Dijkstraning "Go To operatori zararli deb hisoblanadi" maqolasida aks ettirilgan. Dijkstra kodning sifati undagi goto iboralari soniga teskari proportsional ekanligini ta'kidladi. Maqola keng ommalashdi, buning natijasida goto operatoridan foydalanish bo'yicha qarashlar sezilarli darajada qayta ko'rib chiqildi. Strukturaviy dasturlash bo'yicha eslatmalarda Dijkstra kodning rasmiy to'g'riligini o'tishsiz tekshirish ancha oson ekanligini ta'kidladi.
Goto bilan kodni formatlash qiyin, chunki u bajarilish ierarxiyasini (tuzilgan dasturlash paradigmasi) buzishi mumkin va shuning uchun dastur strukturasini aks ettirish uchun mo'ljallangan chekinish har doim ham to'g'ri o'rnatilmasligi mumkin. Bundan tashqari, goto bayonoti boshqaruv tuzilmalari uchun kompilyatorni optimallashtirishga xalaqit beradi.
Goto-dan ba'zi foydalanish dasturni bajarish mantig'ida muammolarni keltirib chiqarishi mumkin:
Agar biron bir o'zgaruvchi bir joyda ishga tushirilsa (qiymat oladigan bo'lsa) va undan keyin ishlatilsa, ishga tushirilgandan so'ng, lekin foydalanishdan oldin bir nuqtaga o'tish, ajratishdan oldin o'zgaruvchi uchun ajratilgan xotirada bo'lgan qiymatni tanlashga olib keladi. (va bu odatda o'zboshimchalik va tasodifiy).
Loop tanasi ichida boshqaruvni o'tkazish tsiklni ishga tushirish kodini yoki dastlabki holatni tekshirishni o'tkazib yuborishga olib keladi.
Xuddi shunday, boshqaruvni protsedura yoki funksiya ichida o'tkazish uning boshlang'ich qismini o'tkazib yuborishga olib keladi, bunda initsializatsiya amalga oshiriladi (mahalliy o'zgaruvchilar uchun xotira ajratish).
Goto bayonotiga qarshi dalillar shu qadar jiddiy bo'lib chiqdiki, tuzilgan dasturlashda ular juda istalmagan deb hisoblana boshladi. Bu yangi dasturlash tillarini loyihalashda o'z aksini topdi. Misol uchun, goto Java va Ruby tillarida noqonuniy hisoblanadi. Bir qator zamonaviy tillarda goto dan foydalanish o'zini oqlagan kamdan-kam hollarda samaradorlik sababli qoldirilgan. Shunday qilib, goto tarixdagi eng me'moriy o'ylangan tillardan biri bo'lgan Ada tilida omon qoldi.
Biroq, ushbu operator saqlanib qolgan yuqori darajadagi tillarda, odatda, uni qo'llashning eng xavfli usullaridan foydalanishga to'sqinlik qiluvchi qattiq cheklovlar qo'yiladi: masalan, boshqaruvni tsikldan tashqaridan o'tkazish taqiqlanadi. , protsedura yoki ichidagi funksiya. C++ tili standarti goto yordamida o'zgaruvchilarni ishga tushirishni chetlab o'tishni taqiqlaydi.
Do'stlaringiz bilan baham: |