QO'LLANILISH SOHASI (SCOPE RULES) O'zgaruvchi dasturning faqat ma'lum sohasida ma'moga egadir. Yani faqat biror
bir blok, yoki bu blok ichida joylashgan bloklar ichida qo'llanilishi mumkin.
Bunday blokni soha (qo'llanilish sohasi - scope) deb ataylik. Identefikator
(oz'garuvchi yoki funksiya ismi) besh hil sohada aniqlanishi mumkin. Bular
funksiya sohasi, fayl sohasi, blok sohasi, funksiya prototipi sohasi va klas
sohasi.
Agar identefikator e'loni hech bir funksiya ichida joylashmagan bo'lsa, u fayl
sohasiga egadir. Ushbu identefikator e'lon nuqtasidan to fayl ohirigacha
ko'rinadi. Global o'zgaruvchilar, funksiya prototiplari va aniqlanishlari
shunday sohaga egadirlar.
Etiketlar (label), yani identefikatorlardan keyin ikki nuqta (:) keluvchi
ismlar, masalan:
chiqish:
mahsus ismlardir. Ular dastur nuqtasini belgilab turadilar. Dasturning boshqa
yeridan esa ushbu nuqtaga sakrashni (jump) bajarish mumkin. Va faqat etiketlar
funksiya sohasiga egadirlar. Etiketlarga ular e'lon qilingan funksiyaning
istalgan joyidan murojaat qilish mumkin. Lekin funksiya tashqarisidan ularga
ishora qilish ta'qiqlanadi. Shu sababli ularning qo'llanilish sohasi
funksiyadir. Etiketlar switch va goto ifodalarida ishlatilinadi. goto
qo'llanilgan bir blokni misol qilaylik.
int factorial(int k) { if (k<2) goto end; else return ( k*factorial(k-1) ); end: return (1); } Bu funksiya sonning faktorialini hisoblaydi. Bunda 0 va 1 sonlari uchun
faktorial 1 ga teng, 1 dan katta x soni uchun esa x! = x*(x-1)*(x-2)...2*1
formulasi bo'yicha hisoblanadi. Yuqoridagi funksiya rekursiya metodini
ishlatmoqda, yani o'zini-o'zini chaqirmoqda. Bu usul dasturlashda keng
qo'llaniladi. Funksiyamiz ichida bitta dona etiket - end: qollanilmoqda.
Etiketlarni qo'llash strukturali dasturlashga to'g'ri kelmaydi, shu sababli
ularni ishlatmaslikga harakat qilish kerak.
Blok ichida e'lon qilingan identefikator blok sohasiga egadir. Bu soha
o'zgaruvchi e'lonidan boshlanadi va } qavsda (blokni yopuvchi qavs) tugaydi.
Funksiyaning lokal o'zgaruvchilari hamda funksiyaning kiruvchi parametrlari
blok sohasiga egadirlar. Bunda parametrlar ham funksiyaning lokal
o'zgaruvchilari qatoriga kiradilar. Bloklar bir-birining ichida joylashgan
bo'lishi mumkin. Agar tashqi blokda ham, ichki blokda ham ayni ismli
identefikator mavjud bo'lsa, dastur isjrosi ichki blokda sodir bo'layatgan
bir vaqtda ichki identefikator tashqi blokdagi identefikatorni to'sib turadi.
Yani ichki blokda tashqi blok identefikatorining ismi ko'rinmaydi. Bunda
ichki blok faqat o'zining o'zgaruvchisi bilan ish yuritishi mumkin. Ayni ismli
tashqi blok identefikatorini ko'rmaydi. Lokal o'zgaruvchilar static deya
belgilanishlariga qaramay, faqat aniqlangan bloklaridagina qo'llanila
oladilar. Ular dasturning butun hayoti davomida mavjud bo'lishlari ularning
qo'llanilish sohalariga ta'sir ko'rsatmaydi.
Funksiya prototipi sohasiga ega o'zgaruvchilar funksiya e'lonida berilgan
identefikatorlardir. Aytib o'tkanimizdek, funksiya prototipida faqat
o'zgaruvchi tipini bersak yetarlidir. identefikator ismi berilsa, ushbu ism
kompilyator tomonidan hisobga olinmaydi. Bu ismlarni dasturning boshqa yerida
hech bir qiyinchiliksiz qo'llash mumkin. Kompilyator hato bermaydi.
Klas sohasiga ega ismlar klas nomli bloklarda aniqlanadilar. Bizlar klaslarni
keyinroq o'tamiz.
Hozir soha va hotirada saqlanish tipi mavzusida bir misol keltiraylik.
//Qo'llanilish sohasi, static va auto
//o'zgaruvchilarga misollar.