www.wikidata.uk-ua.nina.az
Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno traven 2016 Mova programuvannya vikoristovuye strategiyi obchislennya dlya togo shob viznachiti koli obchislyuvati argument i vikliku funkciyi abo operaciyi metodu chi spivvidnoshennya i yaki znachennya peredavati do funkciyi Napriklad viklik za znachennyam viklik za posilannyam viznachayut sho argument obchislyuyetsya do vikonannya tila funkciyi i nadaye dvi mozhlivosti dlya funkciyi otrimati potochne znachennya argumentu ta zminiti jogo cherez viraz prisvoyennya Ponyattya strategiyi skorochennya v lyambda obchislennyah ye shozhim ale maye vidminnosti Na praktici bagato suchasnih mov programuvannya zijshlis na vikoristanni strategiyi vikliku po znachennyu vikliku po posilannyu dlya vikliku funkcij C Java Deyaki movi osoblivo nizhchogo rivnya taki yak S poyednuyut dekilka idej peredachi parametriv Istorichno viklik za znachennyam viklik za posilannyam bere svij pochatok v ALGOL 60 movi stvorenij v piznih 1950 h Viklik po posilannyu vikoristovuyetsya v PL I ta deyakih distributivah Fortran Viklyuchno funkcionalni movi taki yak Haskell a takozh ne povnistyu funkcionalni movi taki yak R vikoristovuyut viklik za potreboyu Zmist 1 Strogi obchislennya 1 1 Aplikativnij poryadok 1 2 Viklik za znachennyam 1 2 1 Neyavni obmezhennya 1 3 Viklik po posilannyu 1 4 Viklik z spivvikoristannyam 1 5 Viklik z kopiyuvannyam ta vidnovlennyam 1 6 Chastkove obchislennya 2 Nestrogi obchislennya 2 1 Normalnij poryadok 2 2 Viklik po imeni 2 3 Viklik za potreboyu 2 4 Viklik iz rozkrittyam makrosiv 3 Nedeterminovani obchislennya 3 1 Povne b skorochennya 3 2 Viklik v majbutnomu 3 3 Optimistichni obchislennyaStrogi obchislennya RedaguvatiV strogih obchislennyah argumenti funkciyi zavzhdi obchislyuyutsya povnistyu pered viklikom funkciyi Aplikativnij poryadok Redaguvati Aplikativnij poryadok abo najlivishij najglibshij strategiya pri yakij argumenti funkciyi obchislyuyutsya zliva napravo v zvorotnomu poryadku obhodu dereva virazu Aplikativnij poryadok vidnositsya do vikliku za znachennyam Viklik za znachennyam Redaguvati Viklik za znachennyam ce najposhirenisha strategiya obchislen yaka vikoristovuyetsya v riznomanitnih movah yak S chi Scheme U vikliku za znachennyam viraz argumentu obchislyuyetsya i otrimane znachennya prikriplyuyetsya do vidpovidnoyi zminnoyi u funkciyi najchastishe kopiyuvannyam znachennya u novu oblast pam yati Yaksho funkciya chi procedura mozhe prisvoyuvati znachennya svoyim parametram to tilki lokalna kopiya zminyuyetsya tobto vse sho bulo peredane pid chas vikliku pislya zakinchennya roboti funkciyi u zovnishnij oblasti vidimosti ne zminyuyetsya Viklik za znachennyam ce shvidshe ne konkretna strategiya obchislen a cile simejstvo strategij obchislen v yakih argument funkciyi obchislyuyetsya pered peredacheyu do funkciyi Bilshist mov programuvannya yaki vikoristovuyut viklik za znachennyam taki yak Common Lisp Eiffel i Java obchislyuyut argumenti zliva napravo deyaki obchislyuyut funkciyi ta argumenti sprava nalivo inshi taki yak Scheme OCaml i C ne vstanovlyuyut poryadok obchislen Neyavni obmezhennya Redaguvati Inodi termin viklik za znachennyam ne ye korektnim tomu sho znachennya yake peredayetsya ne ye znachennyam zminnoyi yak mayetsya na uvazi v zvichajnomu znachenni zminnoyi a ye posilannyam na znachennya yake zalezhit vid realizaciyi Naslidkom ye te sho kod yakij sintaksichno viglyadaye yak viklik za znachennyam mozhe povoditi sebe yak viklik za posilannyam chi viklik za spivvikoristannyam angl call by sharing sho zalezhit vid tonkih aspektiv semantiki movi Prichina peredachi za posilannyam zazvichaj polyagaye v tomu sho tehnichno mova ne nadaye konkretne znachennya dlya skladnih danih a zamist cogo nadaye strukturu danih hocha v kodi voni viglyadayut shozhimi na yedine znachennya Vazhko tochno provesti mezhu mizh vlasne znachennyami ta zamaskovanimi pid nih strukturami danih U S vektor odnomirnij masiv chastkovim vipadkom yakogo ye simvolnij ryadok ye strukturoyu danih i tomu rozglyadayetsya yak simvolnij ryadok ale struktura predstavlyaye soboyu znachennya navit yaksho jogo polem ye vektor U Maple vektor ce chastkovij vipadok tablici i tomu ce struktura danih ale spisok yakij buduyetsya i mozhe buti proindeksovanij takim samim sposobom ye znachennyam V Tcl znachennya ye dvoyakimi tobto na rivni scenariyu voni vikoristovuyutsya u viglyadi znachennya a mova keruye vidpovidnoyu strukturoyu danih yaksho vona potribna Zmini zrobleni zi strukturoyu danih vidobrazhayutsya na znachenni i navpaki Poyasnennya viklik za znachennyam de znachennya ce posilannya ye zagalnovzhivanim ale ne slid rozumiti ce yak viklik za posilannyam inshij termin viklik za spivvikoristannyam Takim chinom viklik za znachennyam u Java abo Visual Basic i viklik za znachennyam u S chi Pascal ye istotno riznimi u S chi Pascal viklik funkciyi z argumentom predstavlenim u viglyadi velikoyi strukturi prizvede do togo sho vsya struktura bude skopijovana za vinyatkom vipadku koli ce bude posilannya na strukturu potencijno viklikayuchi serjozne znizhennya produktivnosti i zmini v strukturi budut nevidimi dlya togo hto viklikav A v Java abo Visual Basic kopiyuyetsya lishe posilannya na strukturu sho vidbuvayetsya shvidko i zmini do strukturi vidimi zzovni Viklik po posilannyu Redaguvati Pri vikliku po posilannyu takozh vidomij yak peredacha po posilannyu funkciya otrimuye neyavne posilannya na zminnu sho vikoristovuyetsya yak argument a ne kopiyu ciyeyi zminnoyi Zazvichaj ce oznachaye sho funkciya mozhe zminyuvati tobto prisvoyuvati nove znachennya zminnij sho peredana yak argument tak sho ce bude pomitno dlya togo hto viklikav cyu funkciyu Tomu viklik po posilannyu mozhe buti vikoristanij dlya zabezpechennya dodatkovogo kanalu zv yazku mizh funkciyeyu sho viklikayetsya ta funkciyeyu yaka viklikaye U movah z viklikom po posilannyu programistu nabagato vazhche vidstezhiti efekti vikliku funkciyi sho mozhe privesti do bagiv bude skladno viyaviti Bagato mov pidtrimuyut viklik po posilannyu v tij chi inshij formi ale porivnyano nebagato vikoristovuyut jogo za umovchannyam FORTRAN II ce mozhe buti prikladom pershoyi z viklikom za posilannyam Neznachna kilkist mov napriklad C PHP Visual Basic NET C i REALbasic za umovchannyam vikoristovuyut viklik za znachennyam ale nadayut specialnij sintaksis dlya vikliku za posilannyam U C takozh ye viklik za posilannyam na konstantu Viklik za posilannyam mozhe buti zmodelovanij v movah yaki vikoristovuyut viklik za znachennyam ta ne pidtrimuyut viklik za posilannyam za dopomogoyu vikoristannya posilan ob yektiv yaki posilayutsya na inshi ob yekti napriklad vkazivnikiv ob yektiv sho mistyat adresu v pam yati de zberigayetsya inshij ob yekt Cej prijom vikoristovuyetsya u takih movah yak C ta ML Ce ne okrema strategiya obchislen ale inodi yiyi nazivayut viklik za adresoyu abo peredacheyu za adresoyu V nenadijnih movah takih yak C ce mozhe viklikati pomilki dostupu do pam yati napriklad nulovij vkazivnik Analogichnij efekt dosyagayetsya cherez viklik z spivvikoristannyam peredacha ob yektu sho mozhe buti zminenij vikoristovuyetsya u movah Java Python ta Ruby V chisto funkcionalnih movah programuvannya zazvichaj nema semantichnoyi riznici mizh cimi strategiyami oskilki strukturi danih nezminni to u funkciyi nema mozhlivostej zminyuvati zhoden zi svoyih argumentiv tozh vvazhayetsya sho voni vikoristovuyut viklik za znachennyam navit yaksho vikoristovuyetsya viklik za posilannyam dlya vigrashu v efektivnosti Priklad sho demonstruye viklik za posilannyam v C void Modify int p int amp q p 27 peredano za znachennyam tilki lokalna kopiya zminyuyetsya q 27 peredano za posilannyam pochatkova zminna tezh otrimaye nove znachennya int main int a 1 int b 1 Modify a b std cout lt lt a lt lt a lt lt std endl na ekran vivedetsya a 1 std cout lt lt b lt lt b lt lt std endl na ekran vivedetsya b 27 return 0 Viklik z spivvikoristannyam Redaguvati Vikoristovuyetsya v movah Python Iota Java dlya posilan na ob yekti Ruby JavaScript Scheme OCaml AppleScript ta bagatoh inshih Pri vikliku z spivvikoristannyam mayetsya na uvazi sho vsi znachennya v movi zasnovani na ob yektah a ne primitivah tobto vsi znachennya zapakovano angl boxed Semantika vikliku z spivvikoristannyam vidriznyayetsya v tomu sho prisvoyennya znachen argumentam vseredini funkciyi ne budut vidimi dlya togo hto viklikav na vidminu vid vikliku za posilannyam tobto dlya peredanogo parametru ne mozhlivo imituvati prisvoyennya v zovnishnij oblasti vidimosti Prote oskilki funkciya maye dostup do togo zh ob yekta sho j toj hto viklikaye kopiya ne stvoryuyetsya to zmini cogo ob yektu yaksho jogo mozhna zminyuvati budut vidimi dlya togo hto viklikav sho vidriznyayetsya vid vikliku za znachennyam Zmini ob yektiv vseredini funkciyi vidimi zzovni tomu sho ob yekt ne kopiyuyetsya chi klonuyetsya vin vikoristovuyetsya spilno Napriklad v Python spiski mozhna zminyuvati tozh def f l l append 1 m f m print m vivodit 1 tomu sho metod append zminyuye ob yekt dlya yakogo vin buv viklikanij Prisvoyennya vseredini funkciyi nevidimi zzovni tomu sho prisvoyennya priv yazuye zminnu do inshogo ob yektu a ne zminyuye sam ob yekt Oskilki cej ob yekt bude isnuvati lishe v oblasti vidimosti funkciyi zovnishnya kopiya zberezhe svoyu pochatkovu priv yazku Cej kod prisvoyuye formalnomu parametru novij ob yekt def f l l 1 m f m print m i vivodit tomu sho viraz l 1 prisvoyuye novij spisok lokalnijzminnij zamist prisvoyennya novogo znachennya dlya originalnoyi zminnoyi Dlya nezminnih ob yektiv nemaye riznici mizh viklikom z spivvikoristannyam ta viklikom za znachennyam okrim identichnosti ob yektiv Vikoristannya vikliku z spivvikoristannyam ye alternativoyu vhidnim ta vihidnim parametram parametri ne perezapisuyutsya a minyayut svij stan zberigayuchi identichnist Cej termin otrimav rozpovsyudzhennya v spilnoti Python analogichni semantiki v inshih movah yak Java ta Visual Basic zazvichaj viznachayutsya yak viklik za znachennyam de pid znachennyam mayetsya na uvazi posilannya na ob yekt Viklik z kopiyuvannyam ta vidnovlennyam Redaguvati Viklik z kopiyuvannyam ta vidnovlennyam viklik iz povernennyam znachennya ce okremij vipadok vikliku po posilannyu v yakomu dlya viklikanoyi funkciyi nadayetsya unikalne posilannya na ob yekt Cej variant otrimav uvagu u bagatoprocesovomu konteksti ta vikliku viddalenih procedur yaksho parametr vikliku funkciyi mozhe buti dostupnij z inshogo potoku vikonannya jogo vmist kopiyuyetsya v nove posilannya koli viklikana funkciya zakinchuyetsya zminenij vmist cogo novogo posilannya kopiyuyetsya nazad do pochatkovogo posilannya vidnovlyuyetsya Semantika vikliku z kopiyuvannyam ta vidnovlennyam takozh vidriznyayetsya vid vikliku za posilannyam koli dva abo bilshe parametriv funkciyi ye psevdonimami odin dlya odnogo tobto vkazuyut na odnu j tu samu zminnu Pri vikliku za posilannyam zapis v odnu z nih vpline na inshu viklik z kopiyuvannyam ta vidnovlennyam unikaye cogo nadannyam funkciyi dvoh nezalezhnih kopij ale zalishaye rezultat dlya togo hto viklikav neviznachenim rezultat vikonannya bude zalezhati vid togo yak ci argumenti budut kopiyuvatis nazad Chastkove obchislennya Redaguvati V chastkovomu obchislenni obchislennya mozhut provoditis v tili neviklikanoyi funkciyi Pidvirazi sho ne mistyat nezv yazanih zminnih obchislyuyutsya zastosuvannya funkcij z vidomimi argumentami skorochuyutsya Yaksho pobichni efekti prisutni povne chastkove obchislennya mozhe prizvesti do nebazhanih rezultativ cherez ce sistemi yaki pidtrimuyut chastkovi obchislennya provodyat yih lishe v chistih virazah tobto virazah bez pobichnih efektiv Nestrogi obchislennya RedaguvatiU nestrogih obchislennyah argumenti obchislyuyutsya tilki todi koli voni vikoristovuyutsya v tili funkciyi Normalnij poryadok Redaguvati Normalnij poryadok abo najlivishij najglibshij obchislennya ce strategiya obchislennya v yakij zovnishni virazi skorochuyutsya zastosuvannyam funkcij pered obchislennyam argumentiv funkciyi sho viklikayetsya Na vidminu vid ciyeyi strategiyi strategiya viklik po imeni ne obchislyuye virazi vseredini neviklikanoyi funkciyi Viklik po imeni Redaguvati V strategiyi viklik po imeni argumenti funkciyi ne obchislyuyutsya pered tim yak funkciya bude viklikana a peredayutsya pryamo v tilo funkciyi vikoristovuyuchi pidstanovku sho zapobigaye zahoplennyu utochniti i dali obchislyuyutsya pri poyavi u funkciyi Yaksho argument v tili funkciyi ne vikoristovuyetsya to vin nikoli ne obchislyuyetsya yaksho vin vikoristovuyetsya dekilka raziv to vin obchislyuyetsya pri kozhnij poyavi Viklik za imenem inodi ye krashim nizh viklik za znachennyam Yaksho argument funkciyi ne vikoristovuyetsya v nij viklik po imeni zberezhe chas oskilki vin ne obchislyuye argumenti v toj chas yak viklik po znachennyu obchislit yih nezvazhayuchi ni na sho Yaksho obchislennya ye neskinchennimi to perevaga ye nejmovirnoyu Ale koli argument funkciyi vikoristovuyetsya viklik po imeni zazvichaj povilnishij i potrebuye dodatkovij perehidnij mehanizm Vpershe buv vikoristanij v ALGOL 60 U Scala za umovchannyam vikoristovuyetsya viklik za znachennyam ale viklik za imenem takozh dostupnij Suchasni movi NET mozhut imituvati viklik po imeni vikoristovuyuchi delegati abo parametri tipu Expression lt T gt V ostannomu vipadku u funkciyu peredayetsya abstraktne sintaksichne derevo V movi Eiffel realizovani agenti yaki predstavlyayut operaciyi sho obchislyuyutsya za potreboyu V movi Seed7 realizovanij viklik za imenem z parametrami funkciyi Viklik za potreboyu Redaguvati Viklik za potreboyu ce vdoskonalenij variant vikliku za imenem Yaksho argument buv obchislenij to vin zberigayetsya dlya nastupnogo vikoristannya V chistomu vilnomu vid pobichnih efektiv varianti ce privodit do takogo zh rezultatu yak i u vipadku z viklikom po imeni koli argument vikoristovuyetsya dva abo bilshe raziv viklik za potreboyu zavzhdi pracyuye shvidshe Oskilki obchislennya viraziv mozhe mati visokij stupin vkladennya movi sho vikoristovuyut viklik za potreboyu zazvichaj ne pidtrimuyut pobichni efekti okrim vikoristannya monad Ce viklyuchaye bud yake neperedbachuvani efekti zi zminnih chiyi znachennya zminyuyutsya pri vidkladenih obchislennyah Linivi obchislennya ce najbilsh rozpovsyudzhena realizaciya semantiki vikliku za potreboyu ale isnuyut i inshi varianti zokrema optimistichni obchislennya Haskell ye najvidomishoyu movoyu sho vikoristovuye strategiyu vikliku za potreboyu R takozh vikoristovuye formu vikliku za potreboyu Movi platformi NET mozhut emulyuvati viklik za potreboyu vikoristovuyuchi tip Lazy lt T gt Viklik iz rozkrittyam makrosiv Redaguvati Viklik iz rozkrittyam makrosiv analogichnij do vikliku za imenem ale vikoristovuye tekstovu pidstanovku zamist pidstanovki sho zapobigaye zahoplennyu Pri neobachnomu vikoristanni mozhe prizvesti do zahoplennya zminnoyi i neperedbachuvanoyi povedinki programi Gigiyenichni makrosi unikayut ciyeyi problemi perevirkoyu i zaminoyu zatinenih zminnih sho ne ye parametrami Nedeterminovani obchislennya RedaguvatiPovne b skorochennya Redaguvati Pri povnomu b skorochenni bud yake zastosuvannya funkciyi mozhe buti skorochene pidstanovkoyu argumentu funkciyi v funkciyu z vikoristannyam pidstanovki sho zapobigaye zahoplennyu v bud yakij chas Ce mozhe buti zrobleno navit z tilom neviklikanoyi funkciyi Viklik v majbutnomu Redaguvati Viklik v majbutnomu abo paralelnij viklik za imenem ce strategiya paralelnih obchislen Znachennya zaplanovanogo virazu obchislyuyetsya paralelno razom z potokom programi Koli znachennya staye potribnim osnovna programa blokuyetsya poki obchislennya zaplanovanogo virazu ne zakinchitsya Ce strategiya ne determinovana oskilki obchislennya mozhut vidbuvatis v bud yakij moment mizh planuvannyam tobto koli stvoryuyetsya viraz i vikoristannyam zaplanovanogo virazu Ce ye analogichnim do vikliku za imenem tomu sho znachennya obchislyuyetsya lishe odin raz i obchislennya mozhut buti vidkladeni do togo momentu poki znachennya ne stane potribne ale riznicya polyagaye v tomu sho obchislennya mozhut pochatis ranishe Bilshe togo yaksho zaplanovane znachennya stane ne potribne napriklad znachennya lokalnoyi zminnoyi u funkciyi yaka zakinchila vikonannya jogo obchislennya mozhut buti zupineni Yaksho cya strategiya bude realizovana za dopomogoyu procesiv abo potokiv planuvannya porodit odin abo bilshe procesiv abo potokiv Dostup do znachennya bude sinhronizovuvati yih z osnovnim potokom i pripinennya obchislen prizvede do znishennya potokiv sho obchislyuyut jogo znachennya Optimistichni obchislennya Redaguvati Optimistichni obchislennya ce she odin variant vikliku za potreboyu pri yakomu argument funkciyi chastkovo obchislyuyetsya pevnij promizhok chasu yakij mozhe buti nalashtovanij pid chas vikonannya programi pislya chogo obchislennya pripinyayutsya i funkciya vikonuyetsya z vikoristannyam vikliku za potreboyu Takij pidhid dozvolyaye uniknuti chastini vitrat vikliku za potreboyu zberigayuchi bazhani harakteristiki pripinennya obchislen Otrimano z https uk wikipedia org w index php title Strategiyi obchislennya amp oldid 39105918