Co je funkční programování?
Funkční programování je programovací paradigma, kde základem výpočtu je vyhodnocení výrazů. Mezi některé vlastnosti patří použití funkcí vyššího řádu, referenční transparentnost a líné vyhodnocení. Výhody programovacího stylu zahrnují to, že programy jsou snadno čitelné, jsou velmi spolehlivé a lze je rozdělit na komponenty. Nevýhody spočívají v tom, že výpočty mohou být pomalé a styl a syntaxe jsou zcela odlišné od ostatních běžných programovacích stylů. Funkční styl programování je častěji přijímán akademiky než profesionály z oblasti informatiky.
Jak název napovídá, funkce jsou základní součástí tohoto programového paradigmatu. Funkce mohou být vnořeny do jiných funkcí, nazývaných funkce vyššího řádu, a každá funkce vyššího řádu může být rozdělena na funkce stavebních bloků, které jsou snadno pochopitelné a ladicí. Příklady některých funkcí vyššího řádu jsou Map a Nest. Funkce Mapa vezme funkci F a seznam proměnných, například (x, y, z) a dá výsledek do seznamu: Mapa [F, (x, y, z)] = (F (x), F (y), F (z)). Hnízdo bere funkci F, proměnnou x a počet iterací: Hnízdo [F, x, 3] = F (F (F (x))).
Čistě funkční programování bere vstup a vrací výstup bez změny stavu proměnné. Jinými slovy, funkce se stejným vstupem bude vždy dávat stejné výsledky bez ohledu na to, co se dříve v programu stalo. Tomu se říká referenční transparentnost. Protože matematické funkce jsou referenčně transparentní, funkční programování je pro mnoho matematiků, inženýrů a vědců intuitivní.
Referenční průhlednost funkcí znamená, že pořadí vyhodnocování funkcí není důležité. Proto funkce nemusí být vyhodnocovány, dokud nejsou potřeba jejich výsledky, což se nazývá líné hodnocení. To je v úplném kontrastu s imperativním programováním, kde program začíná prvním příkazem a běží seznamem až do posledního příkazu. Líné vyhodnocení přeskočí části programu, které logicky nenásledují nebo jsou nadbytečné, což automaticky optimalizuje program a může zkrátit dobu výpočtu.
Funkční programování má oproti jiným paradigmatům programování mnoho výhod. Funkce s jasnými vstupy a výstupy jsou snadno čitelné a srozumitelné. Jakmile je funkce důkladně odladěna, lze ji spolehlivě použít v jiných aplikacích. Vícejádrové stroje mohou být schopny vypočítat funkce, které jsou vyhodnoceny nezávisle paralelně, což výrazně zvyšuje výkon programů.
Bohužel ne všechny programy se hodí pro paralelní výpočet a výpočetní funkční programy mohou být poměrně pomalé. Funkční programy se silně spoléhají na rekurzi, která je často méně efektivní než tradiční metody smyčky nebo iterace. Ve skutečnosti může být funkční programování docela nemotorné a obtížné se ho naučit, protože se nepodobá jiným běžnějším vzorům, jako je objektově orientované programování.
Akademici mají sklon upřednostňovat funkční programování, protože poskytuje jasný a srozumitelný způsob programování složitých problémů skutečného světa. Některé čisté jazyky jsou Haskell a Erlang. Mathematica se specializuje na symbolickou matematiku, R se specializuje na statistiku a J se specializuje na finanční analýzu. Multiparadigmové jazyky jako Scala a F # podporují jak funkční programování, tak i jiné programovací styly.