www.wikidata.uk-ua.nina.az
U komp yuternomu programuvanni oblast diyi zv yazuvannya imeni angl scope zv yazok imeni z ob yektom napriklad zminnoyu ce chastina programi de zv yazuvannya imeni ye dijsnim tobto im ya mozhe vikoristovuvatisya dlya posilannya na sutnist V inshih chastinah programi nazva mozhe posilatisya na inshu sutnist vona mozhe mati inshu priv yazku abo vzagali ni na sho vona mozhe buti nezv yazanoyu Oblast dopomagaye zapobigti zitknennyam imen ce dozvolyaye odnij i tij samij nazvi posilatisya na rizni ob yekti yaksho imena mayut rizni oblasti Oblast priv yazki imeni takozh vidomij yak vidimist sutnosti osoblivo v starishij abo bilsh tehnichnij literaturi z tochki zoru sutnosti na yaku posilayetsya a ne imeni na yake posilayetsya Termin oblast takozh vikoristovuyetsya dlya poznachennya naboru vsih zv yazkiv imen dijsnih u chastini programi abo v pevnij tochci programi sho pravilnishe nazivati kontekstom abo seredovishem a U bilshosti mov programuvannya mezhi diyi zminnoyi zumovleni miscem yiyi ogoloshennya Krim togo mezhi diyi mozhna zaznachiti yavno za dopomogoyu klasiv pam yati abo prostoriv imen Dlya bilshosti mov programuvannya b chastina programi vidnositsya do chastini vihidnogo kodu oblasti tekstu i vidoma yak leksichna oblast vidimosti Prote v deyakih movah chastina programi vidnositsya do chastini chasu vikonannya promizhku chasu pid chas vikonannya i vidoma yak dinamichna oblast Obidva ci termini ye pevnoyu miroyu omanlivimi voni nepravilno vikoristovuyut tehnichni termini yak obgovoryuvalosya u viznachenni ale same rozriznennya ye tochnim i ce standartni vidpovidni termini Leksichnij obsyag ye osnovnim predmetom ciyeyi statti pri comu dinamichnij obsyag rozumiyetsya na vidminu vid leksichnogo obsyagu Zdebilshogo rozpiznavannya imen na osnovi leksichnogo obsyagu ye vidnosno prostim u vikoristanni ta realizaciyi oskilki pid chas vikoristannya mozhna chitati vihidnij kod u zvorotnomu napryamku shob viznachiti do yakoyi sutnosti vidnositsya im ya a v realizaciyi mozhna pidtrimuvati spisok imen i konteksti pid chas kompilyaciyi abo interpretaciyi programi Trudnoshi vinikayut u maskuvanni imen pryamih deklaraciyah i pidjomi todi yak znachno tonshi vinikayut iz nelokalnimi zminnimi osoblivo v zamikannyah Zmist 1 Viznachennya 1 1 Leksichnij obsyag proti dinamichnogo 1 2 Sporidneni ponyattya 2 Riznovidi zminnih zalezhno vid mezh diyi 2 1 Vikoristannya 2 2 Oglyad 2 3 Rivni oblasti 2 4 Oblast virazu 2 5 Oblast bloku 2 6 Oblast funkciyi 3 Movi rozmitki 4 Prikladi 4 1 C 5 PrimitkiViznachennya RedaguvatiSuvore viznachennya leksichnogo oblasti imeni identifikatora ye odnoznachnim leksichnij obsyag ce chastina vihidnogo kodu v yakij zastosovuyetsya zv yazuvannya imeni z sutnistyu Ce praktichno ne zminilosya v porivnyanni z viznachennyam 1960 roku v specifikaciyi ALGOL 60 Tipovi specifikaciyi movi ALGOL 60 1960 1 Rozriznyayut taki vidi velichin prosti zminni masivi mitki peremikachi ta proceduri Oblast diyi velichini ce nabir operatoriv i viraziv u yakih dijsne ogoloshennya identifikatora pov yazanogo z ciyeyu velichinoyu C 2007 2 Identifikator mozhe poznachati ob yekt funkciya teg abo chlen strukturi ob yednannya abo pereliku im ya tipu nazva etiketki im ya makrosa abo parametr makrosa Odin i toj zhe identifikator mozhe poznachati rizni sutnosti v riznih tochkah programi Dlya kozhnoyi okremoyi sutnosti yaku poznachaye identifikator identifikator vidimij tobto mozhe buti vikoristanij lishe v oblasti tekstu programi yaka nazivayetsya yiyi oblastyu Go 2013 3 Ogoloshennya priv yazuye nepustij identifikator do konstanti tipu zminnoyi funkciyi mitki abo paketa Oblast diyi ogoloshenogo identifikatora ce obsyag vihidnogo tekstu u yakomu identifikator poznachaye vkazanu konstantu tip zminnu funkciyu mitku abo paket Najchastishe oblast oznachaye koli dane im ya mozhe posilatisya na zadanu zminnu koli ogoloshennya maye efekt ale takozh mozhe zastosovuvatisya do inshih sutnostej takih yak funkciyi tipi klasi mitki konstanti ta pereliki Leksichnij obsyag proti dinamichnogo Redaguvati Fundamentalna vidminnist u sferi zastosuvannya polyagaye v tomu sho oznachaye chastina programi U movah iz leksichnoyu oblastyu vidimosti takozh zvanoyu statichnoyu oblastyu vidimosti dozvil imen zalezhit vid roztashuvannya u vihidnomu kodi ta leksichnogo kontekstu takozh nazivayetsya statichnim kontekstom yakij viznachayetsya miscem viznachennya nazvanoyi zminnoyi abo funkciyi U movah iz dinamichnoyu oblastyu rozpiznavannya imen zalezhit vid stanu programi koli zustrichayetsya im ya sho viznachayetsya kontekstom vikonannya takozh zvanim kontekstom vikliku abo dinamichnim kontekstom Na praktici z leksichnim obsyagom im ya rozpiznayetsya shlyahom poshuku v lokalnomu leksichnomu konteksti a yaksho ce ne vdayetsya shlyahom poshuku v zovnishnomu leksichnomu konteksti tosho todi yak z dinamichnoyu oblastyu im ya rozpiznayetsya shlyahom poshuku v lokalnomu konteksti vikonannya a yaksho ce ne vdayetsya shlyahom poshuku v zovnishnomu konteksti vikonannya tosho prosuvayuchis vgoru po steku viklikiv 4 Bilshist suchasnih mov vikoristovuyut leksichnu oblast dlya zminnih i funkcij hocha dinamichna oblast vikoristovuyetsya v deyakih movah zokrema v deyakih dialektah Lisp deyakih movah scenariyiv i deyakih movah shabloniv c Perl 5 proponuye yak leksichnu tak i dinamichnu oblast vidimosti Navit u movah iz leksichnoyu oblastyu vidimist dlya zamikan mozhe zbentezhiti oskilki voni zalezhat vid leksichnogo kontekstu de viznacheno zakrittya a ne vid togo de vono viklikayetsya Leksichnu rozdilnu zdatnist mozhna viznachiti pid chas kompilyaciyi vona takozh vidoma yak rannye zv yazuvannya todi yak dinamichna rozdilna zdatnist yak pravilo mozhe buti viznachena lishe pid chas vikonannya i tomu vidoma yak piznye zv yazuvannya Sporidneni ponyattya Redaguvati V ob yektno oriyentovanomu programuvanni dinamichna rozsilka vibiraye metod ob yekta pid chas vikonannya hocha te chi vikonuyetsya faktichne zv yazuvannya imeni pid chas kompilyaciyi chi pid chas vikonannya zalezhit vid movi Faktichna dinamichna oblast vidimosti poshirena v movah makrosiv yaki bezposeredno ne rozpiznayut imena a natomist rozshiryuyutsya na misci Deyaki frejmvorki programuvannya taki yak AngularJS vikoristovuyut termin oblast shob oznachati shos zovsim inshe nizh zaznachene v cij statti U cih frejmvorkah oblast vidimosti ce lishe ob yekt movi programuvannya yaku voni vikoristovuyut JavaScript u vipadku AngularJS yakij pevnim chinom vikoristovuyetsya frejmvorkom dlya emulyaciyi dinamichnoyi oblasti vidimosti v movi yaka vikoristovuye leksichnu oblast vidimosti dlya svoyih zminnih Ci oblasti AngularJS mozhut sami buti v konteksti abo ne v konteksti vikoristovuyuchi zvichajne znachennya terminu u bud yakij chastini programi dotrimuyuchis zvichajnih pravil zminnoyi oblasti vidimosti movi yak i bud yakogo inshogo ob yekta i vikoristovuyuchi vlasne uspadkuvannya ta pravila vklyuchennya U konteksti AngularJS inodi vikoristovuyetsya termin scope zi znakom dolara shob uniknuti plutanini ale vikoristannya znaka dolara v imenah zminnih chasto ne rekomendovano posibnikami zi stilyu 5 Riznovidi zminnih zalezhno vid mezh diyi RedaguvatiU movah sho pidtrimuyut strukturne programuvannya zminni zazvichaj podilyayutsya na dva tipi zalezhno vid vidimosti lokalni zminni ogoloshuyutsya vseredini funkciyi i nedostupni poza neyu globalni zminni ogoloshuyutsya poza vsima funkciyami i dostupni zvidusil 6 neavtoritetne dzherelo Ob yektno oriyentovane programuvannya peredbachaye isnuvannya vseredini kozhnogo klasu troh nariznih dilyanok z osoblivimi mezhami diyi Zakrita angl private mezhi diyi ogoloshen zbigayutsya z mezhami klasu posilatisya na zminni chi metodi mozhna lishe z kodu sho nalezhit klasovi Vidkrita angl public obmezhennya diyi vidsutnye ale posilatisya na zminni chi metodi mozhna lishe cherez im ya ob yekta primirnik klasu Zahishena angl protected mezhi diyi ogoloshen vidpovidayut mezham klasu ta vsih jogo nashadkiv 7 Vikoristannya Redaguvati Oblast ye vazhlivim komponentom rozpiznavannya imen d yakij u svoyu chergu ye fundamentalnim dlya semantiki movi Rozdilna zdatnist imen vklyuchayuchi oblast diyi riznitsya mizh movami programuvannya a v mezhah movi programuvannya zalezhit vid tipu sutnosti pravila dlya oblasti nazivayutsya pravilami oblasti abo pravilami viznachennya Razom iz prostorami imen pravila oblasti vidimosti ye virishalnimi v modulnomu programuvanni tomu zmina v odnij chastini programi ne porushuye nepov yazanu chastinu Oglyad Redaguvati Govoryachi pro obsyag isnuye tri osnovni ponyattya obsyag obsyag i kontekst Oblast ce vlastivist zv yazuvannya imeni todi yak kontekst ce vlastivist chastini programi yaka ye abo chastinoyu vihidnogo kodu leksichnim kontekstom chi statichnim kontekstom abo chastina chasu vikonannya kontekst vikonannya kontekst vikliku abo dinamichnij kontekst Kontekst vikonannya skladayetsya z leksichnogo kontekstu u potochnij tochci vikonannya plyus dodatkovogo stanu vikonannya takogo yak stek viklikiv e Strogo kazhuchi pid chas vikonannya programa vhodit i vihodit iz riznih oblastej priv yazki imen i v moment vikonannya priv yazki imen znahodyatsya v konteksti abo ne v konteksti otzhe priv yazki imen vhodyat u kontekst abo vihoditi z kontekstu koli vikonannya programi vhodit abo vihodit z oblasti vidimosti f Odnak na praktici vikoristannya nabagato vilnishe Oblast ce koncepciya rivnya vihidnogo kodu ta vlastivist zv yazkiv imen zokrema zv yazkiv imen zminnih abo funkcij imena u vihidnomu kodi ye posilannyami na sutnosti v programi i ye chastinoyu povedinki kompilyatora chi interpretatora movi Takim chinom pitannya obsyagu podibni do vkazivnikiv yaki ye tipom posilan sho vikoristovuyutsya v programah bilsh zagalno Vikoristannya znachennya zminnoyi koli im ya znahoditsya v konteksti ale zminna neinicializovana analogichno rozimenuvannyu dostupu do znachennya zavislogo vkazivnika oskilki vin neviznachenij Odnak oskilki zminni ne znishuyutsya doki voni ne vijdut z kontekstu analoga zavislogo vkazivnika ne isnuye Dlya takih sutnostej yak zminni oblast diyi ce pidmnozhina chasu zhittya ob yekta takozh vidoma yak extent im ya mozhe posilatisya lishe na zminnu yaka isnuye mozhlivo z neviznachenim znachennyam ale isnuyuchi zminni ne obov yazkovo ye vidimimi zminna mozhe isnuvati ale buti nedostupnim znachennya zberigayetsya ale ne posilayetsya v danomu konteksti abo dostupnim ale ne cherez zadane im ya u comu vipadku vono ne v konteksti programa poza mezhami imeni V inshih vipadkah trivalist zhittya ne maye znachennya mitka imenovana poziciya u vihidnomu kodi maye trivalist zhittya identichnu programi dlya statichno skompilovanih mov ale mozhe buti v konteksti chi ni v pevnij tochci programi a takozh dlya statichni zminni statichna globalna zminna znahoditsya v konteksti dlya vsiyeyi programi todi yak statichna lokalna zminna znahoditsya lishe v konteksti vseredini funkciyi abo inshogo lokalnogo kontekstu ale obidva mayut chas zhittya protyagom usogo vikonannya programi Viznachennya togo na yaku sutnist posilayetsya im ya vidome yak rozdilennya imen abo zv yazuvannya imen zokrema v ob yektno oriyentovanomu programuvanni i zalezhit vid movi Otrimavshi nazvu mova vlasne kompilyator abo interpretator pereviryaye vsi sutnosti yaki znahodyatsya v konteksti na vidpovidnist u razi neodnoznachnosti dvi sutnosti z odnakovoyu nazvoyu napriklad globalna ta lokalna zminna z odnakovoyu nazvoyu dlya yih rozriznennya vikoristovuyutsya pravila rozpiznavannya imen Najchastishe rozpiznavannya imen spirayetsya na pravilo vnutrishnogo kontekstu do zovnishnogo napriklad pravilo Python LEGB lokalne ohoplyuyuche globalne vbudovane imena neyavno rozv yazuyutsya u najvuzhchomu relevantnomu konteksti U deyakih vipadkah rozpiznavannya imen mozhe buti yavno viznacheno napriklad za dopomogoyu global i nonlocal klyuchovih sliv u Python v inshih vipadkah pravila za zamovchuvannyam ne mozhna zminiti Koli dvi identichni nazvi znahodyatsya v konteksti odnochasno posilayuchis na rizni sutnosti odne govorit pro te sho vidbuvayetsya maskuvannya imen koli im ya z vishim prioritetom zazvichaj najvnutrishnye maskuye im ya z nizhchim prioritetom Na rivni zminnih ce vidomo yak zatinennya zminnih Cherez mozhlivist logichnih pomilok cherez maskuvannya deyaki movi zaboronyayut abo ne rekomenduyut maskuvati viklikayuchi pomilku abo poperedzhennya pid chas kompilyaciyi chi vikonannya Rizni movi programuvannya mayut rizni pravila oblasti vidimosti dlya riznih tipiv ogoloshen i imen Taki pravila oblasti vidimosti mayut velikij vpliv na semantiku movi i yak naslidok na povedinku ta korektnist program U takih movah yak C dostup do nezv yazanoyi zminnoyi ne maye chitko viznachenoyi semantiki ta mozhe prizvesti do neviznachenoyi povedinki podibnoyi do posilannya na zavislij vkazivnik i ogoloshennya abo imena sho vikoristovuyutsya poza yihnoyu oblastyu stvoryuvatimut sintaksichni pomilki Oblasti chasto priv yazani do inshih movnih konstrukcij i viznachayutsya neyavno ale bagato mov takozh proponuyut konstrukciyi specialno dlya keruvannya oblastyu Rivni oblasti Redaguvati Oblast mozhe variyuvatisya vid lishe odnogo virazu do vsiyeyi programi z bagatma mozhlivimi gradaciyami mizh nimi Najprostishim pravilom vidimosti ye globalna oblast vidimosti usi sutnosti vidimi v usij programi Najprostishim pravilom modulnoyi oblasti ye dvorivneva oblast z globalnoyu oblastyu v bud yakomu misci programi ta lokalnoyu oblastyu v mezhah funkciyi Bilsh skladne modulne programuvannya dopuskaye okremu oblast modulya de imena vidimi vseredini modulya privatni dlya modulya ale ne vidimi za jogo mezhami U mezhah funkciyi deyaki movi taki yak C dozvolyayut obmezhuvati oblast diyi bloku pidmnozhinoyu funkciyi inshi osoblivo funkcionalni movi dozvolyayut obmezhuvati oblast virazu odnim virazom Inshi oblasti vklyuchayut oblast vidimosti fajlu zokrema v C yaka povoditsya podibno do oblasti vidimosti modulya i blochnu oblast poza funkciyami osoblivo v Perl Problema polyagaye v tomu koli same pochinayetsya i zakinchuyetsya oblast U deyakih movah takih yak C oblast diyi imeni pochinayetsya z ogoloshennya imeni i tomu rizni imena ogolosheni v odnomu bloci mozhut mati rizni oblasti vidimosti Ce vimagaye ogoloshennya funkcij pered vikoristannyam hocha i ne obov yazkovo yih viznachennya i vimagaye poperednogo ogoloshennya v deyakih vipadkah zokrema dlya vzayemnoyi rekursiyi V inshih movah takih yak Python oblast imeni pochinayetsya na pochatku vidpovidnogo bloku de im ya ogolosheno napriklad pochatok funkciyi nezalezhno vid togo de vono viznacheno tomu vsi imena v mezhah danogo bloku mayut odnakovij obsyag U JavaScript oblast diyi imeni ogoloshenogo za dopomogoyu let abo const pochinayetsya z ogoloshennya imeni a oblast imeni ogoloshenogo za dopomogoyu var pochinayetsya z pochatku funkciyi de ogolosheno im ya sho vidomo yak pidjom zminnoyi Povedinka imen u konteksti yaki mayut neviznachene znachennya vidriznyayetsya u Python vikoristannya neviznachenih imen prizvodit do pomilki vikonannya todi yak u JavaScript neviznacheni imena ogolosheni za dopomogoyu var mozhna vikoristovuvati u vsij funkciyi oskilki voni neyavno priv yazani do znachennya undefined Oblast virazu Redaguvati Obsyag priv yazki imeni ce viraz yakij vidomij yak oblast virazu Oblast virazu dostupna v bagatoh movah osoblivo u funkcionalnih movah yaki proponuyut funkciyu pid nazvoyu let virazi sho dozvolyaye oblasti ogoloshennya buti odnim virazom Ce zruchno yaksho napriklad dlya obchislennya potribne promizhne znachennya Napriklad u Standard ML yaksho f povertaye 12 todi b let val b x f b in b x x b end b ye virazom yakij obchislyuyetsya yak 144 vikoristovuyuchi timchasovu zminnu z imenem x shob uniknuti podvijnogo vikliku f Deyaki movi z blochnoyu oblastyu nablizhayut cyu funkcionalnist proponuyuchi sintaksis dlya bloku yakij bude vbudovano u viraz napriklad vishezgadanij standartnij viraz ML mozhna zapisati na Perl yak span class k do span span class w span span class p span span class w span span class k my span span class w span span class nv x span span class w span span class o span span class w span span class n f span span class p span span class w span span class nv x span span class w span span class o span span class w span span class nv x span span class w span span class p span abo v GNU C yak span class p span span class w span span class kt int span span class w span span class n x span span class w span span class o span span class w span span class n f span span class p span span class w span span class n x span span class w span span class o span span class w span span class n x span span class p span span class w span span class p span U Python dopomizhni zminni u virazah generatora ta rozuminnya spiskiv u Python 3 mayut oblast virazu U C imena zminnih u prototipi funkciyi mayut oblast virazu vidomu v comu konteksti yak oblast protokolu funkciyi Oskilki nazvi zminnih u prototipi ne zgaduyutsya voni mozhut vidriznyatisya u faktichnomu viznachenni voni ye prosto fiktivnimi yih chasto opuskayut hocha voni mozhut vikoristovuvatisya napriklad dlya stvorennya dokumentaciyi Oblast bloku Redaguvati Obsyag priv yazki imeni ce blok yakij vidomij yak oblast bloku Blokova oblast dostupna v bagatoh ale ne u vsih movah programuvannya z blochnoyu strukturoyu Ce pochalosya z ALGOL 60 de kozhna deklaraciya dijsna lishe dlya cogo bloku 8 i sogodni ce osoblivo pov yazano z movami simejstv i tradicij Pascal i C Najchastishe cej blok mistitsya u funkciyi takim chinom obmezhuyuchi oblast vidimosti chastinoyu funkciyi ale v deyakih vipadkah napriklad u Perl blok mozhe buti ne vseredini funkciyi unsigned int sum of squares const unsigned int N unsigned int ret 0 for unsigned int n 1 n lt N n const unsigned int n squared n n ret n squared return ret Yaskravim prikladom vikoristannya oblasti vidimosti bloku ye navedenij tut kod C de dvi zminni obmezheni ciklom zminna ciklu n yaka inicializuyetsya odin raz i zbilshuyetsya na kozhnij iteraciyi ciklu i dopomizhna zminna n squared yaka inicializuyetsya na kozhnij iteraciyi Meta polyagaye v tomu shob uniknuti dodavannya zminnih do oblasti vidimosti funkciyi yaki mayut vidnoshennya lishe do pevnogo bloku napriklad ce zapobigaye pomilkam koli zagalna zminna ciklu i vzhe bula vipadkovo vstanovlena na inshe znachennya U comu prikladi viraz n n yak pravilo ne bude priznacheno dopomizhnij zminnij a tilo ciklu bude prosto napisano ret n n ale v bilsh skladnih prikladah dopomizhni zminni ye korisnimi Bloki v osnovnomu vikoristovuyutsya dlya potoku keruvannya napriklad iz ciklami if while i for i v cih vipadkah oblast diyi bloku oznachaye sho oblast diyi zminnoyi zalezhit vid strukturi potoku vikonannya funkciyi Odnak movi z blochnoyu oblastyu zazvichaj takozh dozvolyayut vikoristovuvati goli bloki yedinoyu metoyu yakih ye mozhlivist detalnogo keruvannya zminnoyu oblastyu Napriklad dopomizhna zminna mozhe buti viznachena v bloci potim vikoristana skazhimo dodana do zminnoyi z oblastyu diyi funkciyi i vidkinuta koli blok zakinchuyetsya abo cikl while mozhe buti ukladenij u blok yakij inicializuye zminni sho vikoristovuyutsya vseredini ciklu yakij slid inicializuvati lishe odin raz Tonkist kilkoh mov programuvannya takih yak Algol 68 i C prodemonstrovana v comu prikladi ta standartizovana z C99 polyagaye v tomu sho zminni oblasti vidimosti bloku mozhut buti ogolosheni ne lishe v tili bloku ale takozh i v operatori keruvannya yaksho bud yakij Ce analogichno parametram funkciyi yaki ogoloshuyutsya v deklaraciyi funkciyi pered pochatkom bloku tila funkciyi i v oblasti vidimosti dlya vsogo tila funkciyi Ce v osnovnomu vikoristovuyetsya v ciklah for yaki mayut operator inicializaciyi okremij vid umovi ciklu na vidminu vid cikliv while i ye zagalnoyu idiomoyu Oblast bloku mozhna vikoristovuvati dlya zatinennya U comu prikladi vseredini bloku dopomizhnu zminnu takozh mozhna bulo b nazvati n zatinyayuchi im ya parametra ale ce vvazhayetsya poganim stilem cherez mozhlivist pomilok Krim togo deyaki nashadki C taki yak Java i C nezvazhayuchi na pidtrimku oblasti vidimosti bloku tobto lokalnu zminnu mozhna vivesti z kontekstu do zavershennya funkciyi ne dozvolyayut odnij lokalnij zminnij prihovuvati inshu U takih movah sproba ogoloshennya drugogo n prizvela b do sintaksichnoyi pomilki i odnu z n zminnih potribno bulo b perejmenuvati Yaksho blok vikoristovuyetsya dlya vstanovlennya znachennya zminnoyi oblast diyi bloku vimagaye shob zminna bula ogoloshena poza blokom Ce uskladnyuye vikoristannya umovnih operatoriv z odnim priznachennyam Napriklad u Python yakij ne vikoristovuye blokovu oblast mozhna inicializuvati zminnu yak taku if c a foo else a de a dostupnij pislya operatora if U Perl yakij maye blochnu oblast zamist cogo potribno ogolositi zminnu pered blokom my a if c a foo else a Chasto zamist cogo ce perepisuyetsya za dopomogoyu mnozhinnogo priznachennya inicializuyuchi zminnu znachennyam za zamovchuvannyam U Python de ce ne potribno ce bude a if c a foo todi yak u Perl ce bude my a if c a foo U vipadku priznachennya odniyeyi zminnoyi alternativoyu ye vikoristannya ternarnogo operatora shob uniknuti blokuvannya ale ce yak pravilo nemozhlivo dlya priznachennya kilkoh zminnih i jogo vazhko prochitati dlya skladnoyi logiki Ce bilsh suttyeva problema v C osoblivo dlya priznachennya ryadka oskilki inicializaciya ryadka mozhe avtomatichno vidilyati pam yat todi yak priznachennya ryadka vzhe inicializovanij zminnij vimagaye vidilennya pam yati kopiyi ryadka ta perevirki yih uspishnosti my counter 0 sub increment counter return counter Deyaki movi dozvolyayut zastosovuvati koncepciyu oblasti vidimosti bloku v riznomu stupeni poza funkciyeyu Napriklad u fragmenti Perl pravoruch counter ce im ya zminnoyi z blochnoyu oblastyu cherez vikoristannya klyuchovogo slova my todi yak increment counter ce im ya funkciyi z globalnoyu oblastyu vidimosti Kozhen viklik increment counter zbilshit znachennya counter na odinicyu ta poverne nove znachennya Kod za mezhami cogo bloku mozhe viklikati increment counter ale ne mozhe inakshe otrimati abo zminiti znachennya counter Cya idioma dozvolyaye viznachati zakrittya v Perl Oblast funkciyi Redaguvati Koli oblast zminnih ogoloshenih u funkciyi ne vihodit za mezhi ciyeyi funkciyi ce nazivayetsya oblastyu vidimosti funkciyi 9 Oblast vidimosti funkciyi dostupna v bilshosti mov programuvannya yaki proponuyut sposib stvorennya lokalnoyi zminnoyi u funkciyi abo pidprogrami zminnoyi oblast diyi yakoyi zakinchuyetsya sho vihodit z kontekstu koli funkciya povertayetsya U bilshosti vipadkiv chas zhittya zminnoyi dorivnyuye trivalosti vikliku funkciyi ce avtomatichna zminna stvorena pid chas zapusku funkciyi abo zminna ogoloshena znishena koli funkciya povertayetsya todi yak oblast vidimosti zminnoyi znahoditsya v mezhah funkciya hocha znachennya vseredini zalezhit vid togo chi ye oblast leksichnoyu chi dinamichnoyu Odnak deyaki movi taki yak C takozh peredbachayut statichni lokalni zminni de chas zhittya zminnoyi dorivnyuye vsomu chasu zhittya programi ale zminna znahoditsya v konteksti lishe vseredini funkciyi U vipadku statichnih lokalnih zminnih zminna stvoryuyetsya pid chas inicializaciyi programi ta znishuyetsya lishe todi koli programa zavershuyetsya yak u vipadku zi statichnoyu globalnoyu zminnoyu ale znahoditsya lishe v konteksti funkciyi yak avtomatichna lokalna zminna Vazhlivo sho v leksichnij oblasti vidimosti zminna z oblastyu vidimosti funkciyi maye oblast vidimosti lishe v mezhah leksichnogo kontekstu funkciyi vona vihodit iz kontekstu koli insha funkciya viklikayetsya v mezhah funkciyi i povertayetsya v kontekst koli funkciya povertayetsya viklikani funkciyi ne mayut dostupu do lokalnih zminnih funkcij sho viklikayut i lokalni zminni znahodyatsya lishe v konteksti vseredini tila funkciyi v yakij voni ogolosheni Navpaki u dinamichnij oblasti vidimosti oblast poshiryuyetsya na kontekst vikonannya funkciyi lokalni zminni zalishayutsya v konteksti koli viklikayetsya insha funkciya vihodyachi z kontekstu lishe pislya zavershennya funkciyi sho viznachaye i takim chinom lokalni zminni znahodyatsya v konteksti funkciyi v yakomu voni viznacheni ta vsi nazivayutsya funkciyami U movah z leksichnim obsyagom i vkladenimi funkciyami lokalni zminni znahodyatsya v konteksti dlya vkladenih funkcij oskilki voni znahodyatsya v tomu samomu leksichnomu konteksti ale ne dlya inshih funkcij yaki ne ye leksichno vkladenimi Lokalna zminna ohoplyuyuchoyi funkciyi vidoma yak nelokalna zminna dlya vkladenoyi funkciyi Oblast diyi funkciyi takozh zastosovna do anonimnih funkcij def square n return n n def sum of squares n total 0 i 0 while i lt n total square i i 1 return total Napriklad u fragmenti kodu Python pravoruch viznacheno dvi funkciyi square i sum of squares square obchislyuye kvadrat chisla sum of squares obchislyuye sumu vsih kvadrativ do chisla Napriklad square 4 dorivnyuye 4 2 16 a sum of squares 4 dorivnyuye 0 2 1 2 2 2 3 2 4 2 30 Kozhna z cih funkcij maye zminnu z imenem n yaka predstavlyaye argument funkciyi Ci dvi n zminnih povnistyu okremi ta ne pov yazani nezvazhayuchi na te same im ya tomu sho voni ye lokalnimi zminnimi z leksichnoyu oblastyu vidimosti z oblastyu vidimosti funkciyi oblast vidimosti kozhnoyi z nih ye okremoyu leksichno okremoyu funkciyeyu i tomu voni ne zbigayutsya Takim chinom sum of squares mozhe viklikati square bez zmini vlasnogo n Tak samo sum of squares maye zminni z imenami total ta i ci zminni cherez yih obmezhenij obsyag ne zavazhatimut bud yakim zminnim z imenem total abo i yaki mozhut nalezhati do bud yakoyi inshoyi funkciyi Inshimi slovami nemaye riziku zitknennya imen mizh cimi imenami ta bud yakimi nepov yazanimi imenami navit yaksho voni identichni Niyakogo maskuvannya imen ne vidbuvayetsya lishe odna zminna z imenem n znahoditsya v konteksti v bud yakij moment chasu oskilki oblasti ne perekrivayutsya Navpaki yakbi podibnij fragment buv napisanij movoyu z dinamichnoyu oblastyu vidimosti n u funkciyi sho viklikaye zalishavsya b u konteksti viklikanoyi funkciyi oblasti vidimosti perekrivalisya b i buli b zamaskovani zatineni novim n u viklikanij funkciyi Oblast diyi funkciyi znachno uskladnyuyetsya yaksho funkciyi ye ob yektami pershogo klasu i mozhut buti stvoreni lokalno dlya funkciyi a potim povernuti U comu vipadku bud yaki zminni u vkladenij funkciyi yaki ne ye lokalnimi dlya neyi nezv yazani zminni u viznachenni funkciyi yaki peretvoryuyutsya na zminni v ohoplyuyuchomu konteksti stvoryuyut zakrittya oskilki ne lishe sama funkciya ale j yiyi kontekst zminnih potribno povernuti a potim potencijno viklikati v inshomu konteksti Ce vimagaye znachno bilshoyi pidtrimki vid kompilyatora ta mozhe uskladniti analiz programi Movi rozmitki RedaguvatiPonyattya mezh diyi takozh stosuyetsya mov rozmitki Napriklad v HTML mezhi diyi imeni polya vvedennya te same stosuyetsya praporciv gudzikiv tosho zbigayutsya z mezhami formi HTML vid lt form gt do lt form gt 10 Prikladi RedaguvatiC Redaguvati Priklad oblastej vidimosti zminnih u movi programuvannya C Zminna foo maye globalni mezhi diyi int foo 0 int main Mezhami diyi zminnoyi bar ye tilo funkciyi main int bar 1 include lt stdio h gt int a 0 Globalna zminna int main printf d a Bude vivedeno chislo 0 int a 1 Ogoloshena lokalna zminna a globalnu zminnu a ne vidno printf d a Bude vivedeno chislo 1 int a 2 She lokalna zminna v bloci globalnu zminnu a ne vidno nevidno i poperednyu lokalnu zminnu printf d a Bude vivedeno chislo 2 Primitki Redaguvati Report on the Algorithmic Language Algol 60 2 7 Quantities kinds and scopes WG14 N1256 2007 updated version of the C99 standard 6 2 1 Scopes of identifiers 2007 09 07 The Go Programming Language Specification Declarations and scope Version of Nov 13 2013 Borning A CSE 341 Lexical and Dynamic Scoping University of Washington Crockford Douglas Code Conventions for the JavaScript Programming Language Procitovano 4 sichnya 2015 UROK 12 lokalni zminni I OBLAST VIDIMOSTI Arhiv originalu za 16 bereznya 2013 Procitovano 11 bereznya 2013 Oblasti vidimosti Arhiv originalu za 16 bereznya 2013 Procitovano 11 bereznya 2013 Backus J W Wegstein J H Van Wijngaarden A Woodger M Bauer F L Green J Katz C McCarthy J ta in 1960 Report on the algorithmic language ALGOL 60 Communications of the ACM 3 5 299 doi 10 1145 367236 367262 rekomenduyetsya displayauthors dovidka Functions Javascript MDN Variables defined inside a function cannot be accessed from anywhere outside the function because the variable is defined only in the scope of the function However a function can access all variables and functions defined inside the scope in which it is defined Specifikaciya movi HTML intuit ru ros ISBN 978 5 94774 648 8 Proignorovano nevidomij parametr translator dovidka V inshomu movnomu rozdili ye povnisha stattya Scope computer science angl Vi mozhete dopomogti rozshirivshi potochnu stattyu za dopomogoyu perekladu z anglijskoyi lyutij 2022 Divitis avtoperekladenu versiyu statti z movi anglijska Perekladach povinen rozumiti sho vidpovidalnist za kincevij vmist statti u Vikipediyi nese same avtor redaguvan Onlajn pereklad nadayetsya lishe yak korisnij instrument pereglyadu vmistu zrozumiloyu movoyu Ne vikoristovujte nevichitanij i nevidkorigovanij mashinnij pereklad u stattyah ukrayinskoyi Vikipediyi Mashinnij pereklad Google ye korisnoyu vidpravnoyu tochkoyu dlya perekladu ale perekladacham neobhidno vipravlyati pomilki ta pidtverdzhuvati tochnist perekladu a ne prosto skopiyuvati mashinnij pereklad do ukrayinskoyi Vikipediyi Ne perekladajte tekst yakij vidayetsya nedostovirnim abo neyakisnim Yaksho mozhlivo perevirte tekst za posilannyami podanimi v inshomovnij statti Dokladni rekomendaciyi div Vikipediya Pereklad nbsp Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Pomilka cituvannya Tegi lt ref gt isnuyut dlya grupi pid nazvoyu lower alpha ale ne znajdeno vidpovidnogo tegu lt references group lower alpha gt Otrimano z https uk wikipedia org w index php title Oblast vidimosti programuvannya amp oldid 40478237