Co je prvotřídní funkce?
„Prvotřídní funkce“ je termín, který lze použít v počítačovém programování a informatice na počítačový programovací jazyk, pokud se jeho zacházení s funkcemi řídí souborem pokynů, přestože plný rozsah a hloubka těchto pokynů není formálně dohodnut . Chcete-li mít prvotřídní funkční programovací jazyk, musí být hlavní funkce, která musí být podporována, schopnost předávat funkce jako argumenty jiným funkcím. Funkci musí být také možné přiřadit proměnné, aby ji bylo možné uložit. Mezi další vlastnosti používané k určení toho, co představuje prvotřídní funkci, patří schopnost dynamicky generovat funkci za běhu a schopnost jazyka mít funkci jako návratovou hodnotu jiné funkce. Jazyky, které podporují prvotřídní funkční architekturu, umožňují vysokou úroveň abstrakce a v některých případech také poskytují mechanismus pro generování běhového dynamického kódu.
Pokud je termín „funkce“ používán ve volně definovaném smyslu, není koncept předávání funkce uvnitř programu proměnnými nutně jedinečný pro jazyky, které nativně implementují prvotřídní podporu funkcí. Schopnost předávat bloky kódu funkcím nebo vracet ne-dynamický kód z funkce lze snadno provést v mnoha programovacích jazycích pomocí různých mechanismů. Jednou z přísných částí definice prvotřídního funkčního jazyka je však to, že manipulace s funkcemi jako s proměnnými musí být prováděna nativně, bez použití metadat, jako jsou podmíněné definice, a bez volání kompilátoru k překompilaci části kód. Termín "funkce" se také používá k označení nezávislých bloků kódu, které se nazývají samostatně, což znamená, že nezahrnují bloky kódu známé jako metody v objektově orientovaných programovacích jazycích nebo bloky někdy nazývané procedury v jiných jazycích.
Pokud je jazyk navržen tak, aby umožňoval prvotřídní funkční kód, mohou být některé návrhové vzory implementovány příměji než v jiných jazycích. Funkce může přijmout funkci jako proměnnou a poté zkonstruovat novou funkci a vrátit novou funkci volajícímu kódu, čímž se vytvoří mechanismus pro vytvoření programového kódu za běhu. To také může umožnit použití uživatelsky zadaných funkcí v reálném čase v jazyce bez použití procesů, jako je reflexe nebo hodnocení.
Mezi nejzákladnější použití architektury prvotřídních funkcí patří vytváření obecných funkcí, které lze snadno znovu použít, a implementace rekurzivních matematických algoritmů, které jsou schopné samy modifikovat své rovnice v průběhu jejich vývoje. Jedno podobné, pokročilejší použití pro prvotřídní mechanismy je implementace polymorfismu v jazycích, ve kterých není konkrétně implementována. To může umožnit volání funkcí se stejným podpisem funkce, ale vykonat kód založený na kontextu, ve kterém byl volán, někdy předáním klíčové funkce polymorfní funkci.