Doira (Scope)
Barcha dasturlash tillarida doira tushunchasi mavjud. Doira dasturlash tiliga qanday o'zgaruvchilar yoki funksiyalar mavjudligini bildiradi.
Keling, misolga qaraylik:
name
o'zgaruvchisi welcome()
funksiyasidan tashqarida aniqlangan. Agar siz welcome()
funksiyasini argument uzatmasdan chaqirsangiz, u xato beradi, garchi argument o'zgaruvchi nomiga mos bo'lsa ham. Agar siz welcome()
ga qiymat uzatsangiz, o'zgaruvchi faqat welcome()
funksiyasi ichida o'zgaradi. Siz funksiyadan tashqarida aniqlagan name
o'zgaruvchisi o'zgarmas holda qoladi.
Keling, funksiyalar ichida o'zgaruvchilarni aniqlagan misolga qaraylik:
add()
funksiyasida siz a
va b
ni aniqlaysiz va ularni qo'shasiz. a
va b
o'zgaruvchilarining mahalliy doirasi mavjud. Bu shuni anglatadiki, ular faqat add()
funksiyasi ichida ishlatilishi mumkin.
subtract()
funksiyasida siz faqat a
ni aniqlaysiz, lekin b
ni ishlatishga harakat qilasiz. Python subtract()
funksiyasida b
mavjudligini tekshirmaydi, faqat dastur ishga tushganda amalga oshiradi.
Bu, Python sizga subtract()
funksiyasini chaqirmaguncha, buni bajarish kerakligini bildirmaydi, shuning uchun siz yuqorida hech qanday xatoni ko'rmaysiz.
Python'da o'zgaruvchilarni funktsiyalar orasida ishlatish uchun maxsus global
kalit so'zi mavjud. Keling, kodni yangilab ko'raylik:
Bu safar siz add()
funksiyasining boshida b
ni global deb aniqlaysiz. Bu sizga subtract()
ichida b
ni ishlatish imkonini beradi, garchi siz uni o'sha joyda aniqlamagan bo'lsangiz ham.
Global o'zgaruvchilarni ishlatish odatda tavsiya etilmaydi. Ularni katta kod fayllarida e'tibordan chetda qoldirish oson, bu esa noaniq xatolarni aniqlashni qiyinlashtiradi. Masalan, agar siz add()
dan oldin subtract()
ni chaqirgan bo'lsangiz, hali ham xatoga duch kelasiz, chunki b
global bo'lsa ham, u add()
bajarilguncha mavjud bo'lmaydi.
Ko'pincha global o'zgaruvchilarni ishlatmoqchi bo'lganingizda, o'rniga sinfni (class) ishlatishingiz mumkin. Sinflar haqida keyingi bobda bilib olasiz.
Agar siz nima qilayotganingizni tushunsangiz, global o'zgaruvchilarni ishlatishda hech qanday muammo yo'q. Ular ba'zan foydali bo'lishi mumkin. Lekin ulardan ehtiyotkorlik bilan foydalanish kerak.