[Powered by Google Translate] DAVID DICIURCIO: Hivyo dhana muhimu kufahamu katika
programu hii ni dhana ya upeo.
Wigo unaweza kuelezwa kama mazingira ambayo kutofautiana ni
inayoonekana au kupatikana.
Kwa mfano, hebu kusema sisi kuwa na kazi, kuu, kwamba ni
zinatakiwa kuongezwa variable, x, kutoka moja mpaka mbili.
Kama tunavyoona, kuu initializes x kwa moja, Prints
nje Nakala baadhi, kisha anaendesha increment kazi, kabla ya
uchapishaji zaidi maandishi.
Kama kazi hii walikuwa kuendesha usahihi, ingekuwa
magazeti nje x kama 2.
Hebu jaribu hilo.
>> Hivyo, kama unaweza kuona, kuu hafanyi kile sisi inatarajiwa.
Ni anarudi thamani 1, badala
kuliko 2 tulivyotarajia.
Sababu ya mdudu hii inaweza kuelezwa na upeo.
Katika kazi, kuu, sisi initialized x
tu ndani ya kazi.
Kwa maneno mengine, x variable ni alitangaza ndani ya nchi ndani
kazi, kuu, na si kupatikana
nje ya kazi.
Tu kuu wanaweza kupata x katika hali hii.
Wakati sisi kuwaita increment hatuwezi kupita x kama pembejeo, lakini
tu nakala ya x.
Kama matokeo ya hili, increment kazi tu anaongeza
thamani 1 kwa nakala ya thamani ya x.
Lakini si kwa X yenyewe.
Wakati sisi kurudi kuu, x yenyewe hajabadilika wakati wote.
Hivyo uchapishaji nje x tu mavuno thamani ya 1.
>> Naam, basi, kwamba majani ya swali: jinsi lazima sisi kurekebisha
kazi hii?
Moja ufumbuzi ni kuwa na increment kurudi thamani.
Kwa njia hii, increment kazi mapenzi
kutupatia nyuma integer.
Hivyo hapa ni code yetu upya kwa
mbadala increment kazi.
Hapa, sisi badala akarudi x + 1, badala ya mwisho tu
na x kuwa sawa na x + 1.
Pia, kuchukua taarifa kwamba sisi badala ya pato la
increment, awali tupu, na int, na kusema kuwa
increment sasa kupita nyuma thamani integer.
Sasa, baada ya anaendesha increment, itakuwa kurejea kwa thamani ya
2, hasa kama sisi lengo.
>> Mwingine hali ambayo inaonyesha umuhimu wa upeo
ni katika scopeloop.c.
Katika kanuni hii, tuna kwa kitanzi ambayo variable
jumla ni initialized wakati kila hatua.
Kwa bahati mbaya, code hii haina kukusanya.
Hii ni kwa sababu jumla variable kweli haipo
nje kwa kitanzi.
Vigezo alitangaza ndani ya matanzi tu lipo ndani ya
kitanzi yenyewe na ni alionyesha katika makosa yetu
ujumbe, jumla Undeclared.
jumla ya variable bado kuwa alitangaza ndani ya wigo
ya kazi kuu.
Aidha, wakati kila iteration wa wetu kwa kitanzi, sisi
ni reinitializing jumla wetu kwa 0.
Hii yenyewe haina kuweka code kutoka kuandaa, lakini
ingeweza kuzuia jumla kutoka milele summing kwa thamani 1 uliopita.
>> Tena nini ni njia bora ya kutatua tatizo hili?
Moja ya njia rahisi ni pamoja na kufanya jumla ya mitaa
kazi, kuu, badala ya kitanzi yenyewe.
Hii jumla ya kweli increment, na hatimaye,
kuruhusu kuwa kuchapishwa baada ya kitanzi.
Mbinu nyingine kwamba mimi itabidi tu kwa ufupi muhtasari ingekuwa
kuwa matumizi ya vigezo kimataifa.
Vigezo Global ni vigezo kwamba ni alitangaza kabla kuu
kwamba kudumisha thamani zao katika mpango mzima.
Bila shaka, kazi inaweza kubadilika thamani ya kimataifa,
lakini hawana kwenda nje ya wigo kama vigezo mitaa.
Hata hivyo, kwa kutumia vigezo kimataifa huelekea kipaji
juu kama kubuni mbaya, kwa vile kuna njia bora ya
kubadilishana data miongoni mwa kazi.
Kwa mfano, kwa kutumia kuyatumia.
Lakini zaidi juu ya kwamba wakati mwingine.
>> Hatimaye, ni muhimu kuwa na ufahamu wa upeo
katika muktadha wa kumbukumbu ya kompyuta, au RAM.
Wakati sisi nitafanya mpango, mitaa vigezo na majukumu
ni aliongeza kwa mahali maalum katika
RAM aitwaye stack.
Kama kurudi kazi, muafaka stack ya vigezo ni
ufanisi kuondolewa kutoka stack kumkomboa up kumbukumbu zaidi.
Hivyo wakati marekebisho upeo, hakikisha unakumbuka hizi tatu
muhimu pointi.
Moja, upeo inaweza kuwa ama ndani au wa kimataifa.
Ni inategemea ambapo variable ni alitangaza.
Mbili, vigezo alitangaza au initialized katika kazi ni
mitaa kwa kazi hiyo na haiwezi kubadilishwa kwa wengine
kazi, angalau si bila kutumia kuyatumia.
Hatimaye, vigezo ni pia mitaa matanzi kwamba ni
alitangaza ndani.
vigezo si kupatikana
nje ya kitanzi.
>> Hayo ni yote kwa sasa juu ya upeo.
Shukrani kwa ajili ya kuangalia.