Přísné hodnocení

Přísné vyhodnocení, známé také jako dychtivé vyhodnocení, je strategie hodnocení používaná většinou funkčních programovacích jazyků, kde je výraz vyhodnocen, jakmile je vázán na proměnnou. Striktní hodnocení je v přímém protikladu k línému hodnocení, kdy je hodnocení výrazu odloženo, dokud není potřeba jeho hodnota. Haskell je nejpopulárnější programovací jazyk, který používá líné hodnocení. Většina programovacích jazyků používá přísné vyhodnocení funkčních argumentů (někdy označovaných jako parametry), jako je Java, Scheme (jazyk Lisp) a JavaScript.

Použití přísných výsledků hodnocení v kódu, který je snadno srozumitelný z hlediska pořadí provádění, jednodušší proces ladění ve srovnání s jinými strategiemi hodnocení a odpovědnost za výkon kódu se přesouvá na programátora, což znamená, že je vyžadován pečlivý proces optimalizace kódu.


Strategie hodnocení v programování

Vyhodnocovací strategie se používají v programovacích jazycích k určení, kdy se mají vyhodnotit argumenty volání funkce a jaký druh hodnoty se má předat funkci. Existuje mnoho strategií hodnocení, ale většina spadá do jedné ze dvou zastřešujících kategorií: Přísné a líné hodnocení.

Přísné strategie hodnocení

  • Call-by-value: Nejběžnější strategie hodnocení, která spočívá v kopírování obsahu skutečných parametrů do formálních parametrů. Pokud je funkce schopna přiřadit hodnoty svým parametrům, je přiřazena pouze její lokální proměnná, což znamená, že vše, co se předá volání funkce, se nezmění. Call-by-value není jedinou strategií hodnocení, ale spíše rodinou, ve které se před předáním funkci vyhodnotí argumenty funkce. Programovací jazyky jako C, Eiffel a Common Lisp používají strategii call-by-value.
  • Call-by-reference: Další společná strategie. Zatímco strategie call-by-value kopíruje obsah skutečného parametru do formálního parametru, strategie call-by-reference zkopíruje adresu skutečného parametru do formálního. Funkce přijímá implicitní odkaz na proměnnou použitou jako argument, nikoli kopii její hodnoty. C ++ používá strategii call-by-reference.

Líné strategie hodnocení

  • Normální pořadí: Výraz je vyhodnocen opakovaným vyhodnocením výrazu nejvíce vlevo, nejvíce redukovatelného.
  • Call-by-name: Skutečný parametr se vyhodnotí, pouze pokud je použit uvnitř funkce. Pokud se parametr v těle funkce nepoužívá, nikdy se nevyhodnocuje. Pokud se použije několikrát, přehodnotí se pokaždé, když se objeví.
  • Expanze po jednotlivých makrech: Podobně jako call-by-name, ale vyhne se nahrazení. Poskytuje vývojářům mechanismus pro přidání nové syntaxe do základní jazykové gramatiky známé jako makra. Makra jsou do kódu rozšířena preprocesorem maker.
  • Call-by-need: Parametr je vyhodnocen, pouze pokud je použit. Jakmile dojde k prvnímu vyhodnocení, výsledek se uloží do mezipaměti, takže další použití parametru nevyžaduje opětovné vyhodnocení.