Vyhodnocovací strategie

Vyhodnocovací strategie (nebo také redukční strategie – pojem se typicky používá ve funkcionálních jazycích) v programovacím jazyce je množina pravidel (většinou deterministických), která definuje způsob vyhodnocování výrazů. Důraz je obvykle kladen na funkce a operátory – vyhodnocovací strategie definuje, kdy a v jakém pořadí jsou vyhodnocovány argumenty funkce, a kdy a jakým způsobem jsou ve funkci nahrazovány.

Jazyk může kombinovat několik vyhodnocovacích strategií. Například C++ kombinuje volání hodnotou a volání referencí. Většina jazyků, které jsou převážně striktní, používají nějakou formu nestriktního vyhodnocování pro booleovské výrazy a podmíněné příkazy.

Striktní vyhodnocování

V striktním vyhodnocování jsou argumenty funkce vždy zcela vyhodnoceny před tím než jsou na funkci aplikovány (aplikace argumentů na funkci je v imperativních jazycích často označována jako volání funkce s danými argumenty).

Volání hodnotou

Volání hodnotou je nejčastější vyhodnocovací strategie, používaná například v jazyce C. Při volání hodnotou je argument výrazu vyhodnocen a výsledná hodnota je přiřazena k odpovídající proměnné ve funkci (obvykle zkopírováním hodnoty na nové místo v paměti). Pokud je dovoleno, aby funkce, nebo procedura mohla přiřadit hodnoty svým argumentem, tato hodnota je přiřazena pouze lokální kopii. To znamená, že cokoliv volající pomocí argumentů odevzdal funkci má po vrácení z volání funkce volající v rozsahu platnosti nezměněny.

Volání referencí (odkazem)

Volání referencí je způsob vyhodnocování používaných v některých jazycích (například C++), kde proměnné a některé jiné hodnoty, nazývané l-hodnotou (anglicky l-value), musí vždy odkazovat na nějaké místo v paměti. V těchto jazycích některé funkce jako své argumenty akceptují pouze l-hodnoty. S l-hodnotou se musí vždy zacházet jako s referencí a musí být předána funkcí pomocí hodnoty. Tělo funkce může pak manipulovat s obsahem odkazovaných buňky paměti, změnou hodnoty na kterou l-hodnota ukazuje ve rozsahu platnosti volajícího.

V jazycích, které používají neomezované ukazatele namísto nebo spolu s referencemi, je volání adresou variant k volání referencí, kde reference je neomezený ukazatel.

Některé jazyky používají reference, nebo ukazatele jako zvláštní hodnoty. Například ML má "ref" konstruktor, jazyk C intenzivně využívá ukazatele. V těchto jazycích je "volání referencí" nebo "volání adresou" může být použito jako způsob předání hodnoty reference, nebo hodnoty ukazatele jako argumentu funkce.

Nestriktní vyhodnocování

V nestriktním vyhodnocování nejsou argumenty funkce vyhodnocovány, dokud nejsou právě použity při vyhodnocování těla funkce.

Normální vyhodnocování

Normální vyhodnocování je vyhodnocovací strategie, kde je při aplikování funkce redukovaná ta funkce, která je nejvíce venku, aniž by byly vyhodnoceny funkční argumenty. Od volání jménem se liší tím, že se nevyhodnocuje vnitřní tělo nepoužívání funkce.

Volání jménem

Vyhodnocování volání jménem je zřídka implementováno přímo, ale často je použito při uvažování nad teoretickými vlastnostmi programů a programovacích jazyků. Při vyhodnocování voláním jménem nejsou argumenty funkce vůbec vyhodnocovány – spíše jsou argumenty funkce přímo nahrazeny ve funkčním těle. Když argument není vůbec použit, tak se nikdy nevyhodnotí. Když je argument používán několikrát, tak je vždy znovu vyhodnocován. Z tohoto důvodu se sémantika volání jménem obvykle implementuje voláním dle potřeby.

Volání dle potřeby

Volání dle potřeby je paměťová vyhodnocovací verze volání jménem. Když je poprvé vyhodnocen argument funkce, tak se jeho hodnota uloží. Při dalším vyhodnocování se použije uložená hodnota. Když je argument používán dvakrát nebo vícekrát, tak je volání podle potřeby téměř vždy rychleji než volání jménem. V jazyce, který má "čisté" výrazy (bez vedlejších efektů), toto dává stejné výsledky jako při volání jménem.

Volání dle potřeby lze použít pouze v jazycích, které zaručují referenční transparentnost – například v deklarativních, nebo funkcionálních jazycích. Při použití imperativních jazyků toto není zaručeno na 100 % (protože vyhodnocování výrazu závisí na stavu, ve kterém se program nachází – ve výrazu se může měnit hodnota globální proměnné a při každém vyhodnocení může mít tento výraz jinou hodnotu).

Odkazy

Reference

V tomto článku byl použit překlad textu z článku Vyhodnocovacia stratégia na slovenské Wikipedii.


Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Vyhodnocovací_strategie
Zobrazit sloupec 

Kalkulačka - Výpočet

Výpočet čisté mzdy

Důchodová kalkulačka

Přídavky na dítě

Příspěvek na bydlení

Rodičovský příspěvek

Životní minimum

Hypoteční kalkulačka

Povinné ručení

Banky a Bankomaty

Úrokové sazby, Hypotéky

Směnárny - Euro, Dolar

Práce - Volná místa

Úřad práce, Mzda, Platy

Dávky a příspěvky

Nemocenská, Porodné

Podpora v nezaměstnanosti

Důchody

Investice

Burza - ČEZ

Dluhopisy, Podílové fondy

Ekonomika - HDP, Mzdy

Kryptoměny - Bitcoin, Ethereum

Drahé kovy

Zlato, Investiční zlato, Stříbro

Ropa - PHM, Benzín, Nafta, Nafta v Evropě

Podnikání

Města a obce, PSČ

Katastr nemovitostí

Katastrální úřady

Ochranné známky

Občanský zákoník

Zákoník práce

Stavební zákon

Daně, formuláře

Další odkazy

Auto - Cena, Spolehlivost

Registr vozidel - Technický průkaz, eTechničák

Finanční katalog

Volby, Mapa webu

English version

Czech currency

Prague stock exchange


Ochrana dat, Cookies

 

Copyright © 2000 - 2024

Kurzy.cz, spol. s r.o., AliaWeb, spol. s r.o.