[Powered by Google Translate] DAVID DICIURCIO: Do grava koncepto por kompreni en
programado estas la nocio de medio.
Medio povas esti difinita kiel la kunteksto en kiu variablo estas
videbla aŭ alirebla.
Ekzemple, ni diras, ke ni havas funkcion, ĉefa, tio estas
supozas pliigo variablo, x, de unu al du.
Kiel ni povas vidi, ĉefa inicializa x al unu, presas
iun tekston, tiam kuras la funkcio pliigo, antaŭ
presi tekston.
Se ĉi tiu funkcio estis por kuri ĝuste, ĝi estus
presi x kiel 2.
Ni provu ĝin.
>> Do, kiel vi povas vidi, ĉefa ne faras tion, kion ni atendas.
Ĝi redonas la valoron 1, prefere
ol la 2 ni atendis.
La kialo por tiu eraro povas klarigi por atingo.
En la funkcio, ĉefa, ni inicializado x
nur ene de la funkcio.
En aliaj vortoj, la variablo x estas deklarita loke ene de la
funkcio, ĉefa, kaj ne estas atingebla
eksteren de la funkcio.
Nur ĉefa povas aliri x en ĉi tiu situacio.
Kiam ni nomas pliigo ni ne pasas x kiel la enigo, sed
nur kopion de x.
Kiel rezulto de tio, la funkcio pliigo nur aldonas
la valoro 1 al kopio de la valoro de x.
Sed ne al x sin.
Kiam ni revenos al ĉefa, x mem ne ŝanĝis tute.
Do presi el x nur liveri la valoron de 1.
>> Nu, tiam kiu lasas la demandon: kiel ni ripari
ĉi tiu funkcio?
Unu solvo estas havi pliigo resendas valoron.
En ĉi tiu maniero, la funkcio pliigo volo
doni al ni reen entjero.
Do jen nia reviziita kodo kun la
alterna pliigo funkcio.
Tie, ni anstataŭ revenis la x + 1, anstataŭ nur fino
kun x esti egala al x + 1.
Ankaŭ, prenu rimarki ke ni anstataŭis la eligo de
pliigo, antaŭe neniigas, kun int, asertante ke
pliigo nun pasi reen entjero valoro.
Nun, post pliigo runs, ĝi revenos kun valoro de
2, ĝuste kiel ni intencis.
>> Alia situacio kiu pruvas atingo de graveco
estas en scopeloop.c.
En ĉi tiu kodo, ni havas por buklo en kiu la variablo
entute estas inicializado dum ĉiu paŝo.
Bedaŭrinde, ĉi tiu kodo ne kompili.
Ĉi tiu estas ĉar la variablo tuta fakte ne ekzistas
ekster la por buklo.
Variabloj deklaritaj en bukloj nur ekzistas ene de la
buklo mem kaj estas pruvita en nia eraro
mesaĝon, entute ne deklarita.
La variablo tuta ankoraŭ ne deklaris ene de la medio
de la funkcio main.
Plue, dum ĉiu ripeto de nia por ciklo, ni
estas reinitializing nia tota al 0.
Tiu mem ne observas la kodon de kompili, sed
neebligus tuta de eterne sumanta al valoro pasintaj 1.
>> Denove, kio estas la plej bona maniero por fiksi ĉi tion?
Unu el la pli facile metodoj inkludas farante tuta loka al
la funkcio, ĉefa, anstataŭ al la buklo mem.
Tio plena por fakte pliigo, kaj finfine,
permesas presi post la por buklo.
Alia tekniko, kiun mi faros nur mallonge resumi would
esti la uzado de tutmonda variabloj.
Suma variabloj estas variabloj kiuj deklaris antaŭ ĉefaj
kiuj subtenas lian valoron tra la tuta programo.
Kompreneble, funkcioj povas ŝanĝi la valoron de tutmonda,
sed ili ne eliru el medio kiel loka variabloj.
Tamen, uzante tutmonda variabloj inklinas esti malaprobita
sur tiel malbona dezajno, pro tio ke estas pli bonaj manieroj de
dividi datumojn inter funkcioj.
Ekzemple, uzante punteros.
Sed pli en tiu alia tempo.
>> Fine, estas grave havi komprenon de medio
en la kunteksto de la komputilo memoro, aŭ RAM.
Kiam ni ekzekuti programon, lokaj variabloj kaj funkcioj
aldonas al specifa loko en la
RAM nomis la stako.
Kiel funkcioj reveno, la stako kadroj de la variabloj estas
efektive forigita de la pilo liberigante pli memoro.
Do kiam revizii medion, certigu vi memoras tiujn tri
ŝlosilaj punktoj.
Unu, amplekso povas esti ĉu loka aŭ tutmonda.
Ĝi dependas de kie la variablo estas deklarita.
Du, variabloj deklaris aŭ inicializado en funkcioj estas
lokaj al tiu funkcio kaj ne povas esti ŝanĝita de aliaj
funkcioj, almenaŭ ne sen uzi punteros.
Fine, variabloj estas ankaŭ loka al maŝojn kiuj estas
deklaris ene.
La variabloj estas ne atingebla
eksteren de la ciklo.
>> Tio estas ĉio por nun medion.
Dankon pro rigardante.