[Powered by Google Translate] DAVID DICIURCIO: Beraz, oso garrantzitsua da kontzeptua eusten
programazio esparrua nozioa da.
Scope testuinguru aldagai bat da, hain zuzen, gisa defini daiteke
ikusgai den, edo eskuragarri.
Esate baterako, demagun funtzio bat, nagusia, hau da, behar dugu
ustezko batetik bi aldagai bat, x, Kontatzailea.
Ikusten den bezala, nagusia initializes x bat, bistaratzen
testu batzuk, eta gero funtzioa gehikuntza bidez, aurretik
testu inprimatzeko.
Funtzio hau behar bezala exekutatu balitz
inprimatu x 2.
Dezagun saiatuko da.
>> Beraz, ikusi dezakezu bezala, nagusiak ez du egin, zer espero dugu.
1 balioa itzultzen du, eta ez
2 baino espero dugu.
Bug honen arrazoia esparrua azaldu daiteke.
Funtzioa, x, hasieratu dugu
funtzio barruan bakarrik.
Beste era batera esanda, x aldagaia barruan deklaratu lokalean
funtzio nagusia, eta ez da eskuragarria
funtzioa kanpo.
Nagusia bakarrik egoera horretan x sar daitezke.
Gehikuntza deitzen dugun ez dugu gainditu x sarrera gisa, baina
x kopia bat besterik ez da.
Horren ondorioz, funtzio gehikuntza bakarrik gehitzen
balioa 1 x balioa kopia bat.
Baina, berez, ez X.
Nagusira itzuliko gara, x bera ez da aldatu guztietan.
Beraz out inprimatzeko x 1 balioa eman.
>> Beno, ondoren uzten duen galdera: nola konpondu behar dugu
Funtzio hau?
Soluzio bat da gehikuntza itzultzeko balio bat izatea.
Modu honetan, funtzio gehikuntza
ematen diguten zenbaki oso bat.
Hortaz, hona hemen gure kodea bateginaren
ordezko gehikuntza funtzioa.
Hemen, itzuli ordez x + 1, baizik eta amaiera baino zerbait
x x + 1 berdina izanik.
Era berean, konturatu ordezkatu dugun irteera
gehikuntza, aldez aurretik gal, int, adieraziz dela
gehikuntza egingo da orain zaio atzera osoko balioa.
Orain, gehikuntza eskailerak ondoren, balio bat egingo du itzultzeko
2, zehazki zuzendua dago.
>> Esparrua garrantzia erakusten duten beste egoera
scopeloop.c da.
Kodea honetan, bat behar dugu begizta duen aldagaia
guztira urrats bakoitzean zehar hasieratu.
Zoritxarrez, kode hau ez konpilatu.
Hau da, aldakorra guztira benetan ez dituelako existitzen
loop for kanpo.
Loops barruan deklaratu Variables barruan bakarrik existitzen
begizta bera eta gure error frogatu
mezua, guztira undeclared.
Aldakorra guztira dauka oraindik esparruan deklaratu
funtzio nagusia.
Gainera, gure iterazio guztietan loop zehar,
gure guztira reinitializing 0.
Honek, berez, ez da mantendu kodea konpilatzean, baina
guztira ezingo litzateke inoiz balio bat 1 past summing.
>> Berriz ere, zer da hau konpontzeko modurik onena?
Metodo errazago bat guztira tokiko
funtzioa, baizik eta begizta bera baino nagusia.
Hau benetan Kontatzailea guztira izango da, eta, azken finean,
baimendu loop for ondoren inprimatu behar da.
Beste teknika bat egingo dut bakarrik laburki laburtzeko
aldagai global erabilera izango da.
Global aldagai nagusia aurretik deklaratu diren aldagai
mantentzeko bere programa osoan zehar balio duten.
Jakina, funtzio global baten balioa alda daiteke,
baina ez dute joan-esparrua aldagai lokaletik.
Hala eta guztiz ere, aldagai global joera frowned dira
diseinu txarra, ez baitago hobeak dira modu gisa haren
funtzioen artean datuak partekatzea.
Esate baterako, erakusleak erabiliz.
Baina, une horretan beste.
>> Azkenik, garrantzitsua da esparrua ulertzea
ordenagailuaren memoria, edo RAM testuinguruan.
Programa bat abiaraziko dugu, aldagai lokalak eta funtzioak
kokapen zehatz bat gehitu
RAM izeneko pila.
Funtzioak bueltan, aldagai marko pila
eraginkortasunez pila askatzeaz memoria gehiago kendu.
Beraz, esparrua berrikustea, ziurtatu horiek gogoratzen duzu hiru
funtsezko puntuak.
One, esparrua bai lokal edo global izan daiteke.
Araberakoa da non aldagai izendatu da.
Bi, deklaratu edo hasieratu funtzioak aldagaiak dira
tokiko funtzio hori eta ezin da beste batzuek aldatu
funtzioak, gutxienez, ez erakusleak erabili gabe.
Azkenik, aldagai ere loops diren tokiko
deklaratu barruan.
Aldagaiak ez dira irisgarriak
Begizta kanpo.
>> Hori da esparrua orain.
Eskerrik asko ikusteko.