The Funkcionální programování odpovídá programovacímu vzoru, který je založen na konceptu uvádění postupu programu jako matematického funkčního modelu, nikoli jako explicitní sekvence instrukcí k procesoru, což je hlavní koncept v imperativním programování.
Funkční jazyk spíše než provádění příkazů zdůrazňuje výroky a pojmy. V tomto programování bude výsledek záviset pouze na parametrech, které jsou předány funkci, na rozdíl od jiných typů, které se řídí místním nebo globálním stavem.
Jeho název pochází z matematických funkcí, kterými jsou přiřazení sady vstupů k sadě výstupů. Matematická funkce ve skutečnosti nedělá žádnou práci, ale popisuje model procesu a vysvětluje pomocí vzorce, co sada vstupů produkuje ve funkci.
Rejstřík článků
Základem, na kterém bylo funkční programování založeno, byl lambda kalkul, který byl vyvinut během třetího desetiletí 20. století k definování a aplikaci funkcí. LISP byl první programovací jazyk svého druhu navržený v roce 1960.
Ačkoli většina programovacích jazyků sestává ze vstupů, výstupů a externích proměnných, které lze nastavit nebo použít z funkcí, funkční programování tomu předchází. Myšlenka je, že pokaždé, když je funkce volána se stejnými parametry, měla by vrátit stejnou hodnotu.
Funkční programovací jazyky se nazývají aplikace, protože funkce se aplikují na jejich parametry, stejně jako deklarativní a neprocesní, protože definice určují, co se má počítat, a ne jak se počítá.
Funkce je čistá, pokud nemá žádné pozorovatelné vedlejší účinky, jako je změna externích proměnných, změny v souborovém systému atd..
Tyto funkce jsou považovány za přesvědčivé, protože výslovně nezmění žádné proměnné, na kterých by v určitém okamžiku mohly záviset jiné části kódu. Zdálo by se to trapné kódovat s těmito omezeními, ale tyto funkce by měly být považovány za deterministické, předvídatelné a skládatelné..
Funkce jsou považovány za hodnoty, které lze přiřadit proměnným, takže je lze předat a vrátit z jiných funkcí. To znamená, že funkci lze použít, jako by to byl parametr nebo jako hodnota, která se vrací.
To znamená, že funkci lze předat jako takovou, nikoli pouze jako výsledek funkce. Zvažte například funkci double (x), která vrací dvojnásobnou hodnotu svého vstupního parametru. Double (2) by tedy vrátil 4.
Jelikož se jedná o funkci první třídy, kód (double (double (2)) by byl stejný jako kód double (4). To vám umožňuje vnořit jednu funkci jako parametr jiné atd..
Odkazuje na skutečnost, že v tomto programovacím vzoru nejsou žádné příkazy přiřazení. To znamená, že pokud chcete uložit další hodnoty, musí být definovány nové proměnné. Proto je stav proměnné po celou dobu konstantní.
Tím se eliminuje sebemenší možnost nežádoucích účinků, protože libovolnou proměnnou lze během jakéhokoli bodu provádění programu nahradit její skutečnou hodnotou..
Ve funkčním programování neexistují žádné smyčky „pro“ a „while“. Místo toho se iterace spoléhá na rekurzi. Rekurze je implementována pomocí rekurzivních funkcí, které se opakovaně nazývají, dokud není dosaženo základního případu.
Proměnné jsou neměnné, to znamená, že po inicializaci proměnné není možné ji měnit. I když lze vytvořit novou proměnnou, úpravy existujících proměnných nejsou povoleny.
Na příkladu můžete analyzovat rozdíl mezi těmito přístupy a provést stejnou operaci v obou uspořádáních, což je filtrování lichých čísel ze seznamu a nahrazení 5 za sudá čísla menší než 5.
Je to stejný výpočet se stejným výsledkem. Jak však vidíte, imperativní kód je podrobný a není okamžitě jasný. Na druhou stranu je deklarativní přístup čitelný a explicitní, protože se zaměřuje na to, co chcete získat.
Co je definováno jako čisté a nečisté funkce, lze objasnit pomocí několika základních příkladů:
Znamená to používat funkce stejným způsobem, jako se používají data. Proto je lze předat jako parametry jiné funkci. V následujícím příkladu lze funkci int předat jako parametr funkci mapy:
>>> seznam (mapa (int, ["1", "2", "3"]))
[1, 2, 3]
Mohou být přiřazeny k proměnným a vráceny. Například v následujícím kódu můžete přiřadit funkci hello_world a poté provést proměnnou jako funkci.
- Zaměřte se na to, čeho chcete dosáhnout (deklarativní), a nikoli na to, jak toho dosáhnout (imperativ).
- Neobsahují příkazy přiřazení, takže poté, co proměnné dostanou hodnotu, se již nezmění. Funkční programy proto neobsahují vedlejší účinky.
- Logický tok je jasný, protože stav je méně rozptýlený a není implicitně upraven.
- Podporuje koncept líného vyhodnocení, což znamená, že hodnota se vyhodnotí a uloží pouze v případě potřeby.
- Protože čisté funkce nemění žádný stav a jsou zcela závislé na vstupu, lze je snadno pochopit. Návratová hodnota daná těmito funkcemi je stejná jako výsledek, který produkují.
- Kvůli povaze čistých funkcí, aby se zabránilo změně proměnných nebo jakýchkoli externích dat, je implementace souběžnosti efektivní.
- S funkcemi se zachází jako s hodnotami, které se předávají dalším funkcím jako parametry. To zlepšuje porozumění a čitelnost kódu..
- Čisté funkce přebírají parametry jednou a vytvářejí neměnný výstup. Použití nezměnitelných hodnot usnadňuje ladění a testování.
Jsou kratší a srozumitelnější než imperativy. Studie ukázaly, že průměrná produktivita programátora, pokud jde o řádky kódu, je víceméně stejná pro jakýkoli programovací jazyk, což znamená vyšší produktivitu.
Volání funkce nemůže mít jiný účinek než výpočet jejího výsledku. To vylučuje důležitý zdroj chyb a také činí pořadí provádění irelevantní, protože žádný sekundární efekt nebude schopen změnit hodnotu výrazu a lze jej kdykoli vyhodnotit.
Programátor je zbaven břemene zavádění toku řízení. Protože výrazy lze vyhodnotit kdykoli, lze proměnné nahradit jejich hodnotami.
Tato autonomie upřednostňuje, že funkční programy jsou matematicky zvládnutelnější než běžné programy..
- Paradigma funkčního programování není jednoduché, takže začátečníkovi je těžké porozumět.
- Je obtížné jej udržovat, protože během kódování se vyvíjí mnoho objektů.
- V některých případech zápis čistých funkcí způsobí snížení čitelnosti kódu.
- Nezměnitelné hodnoty v kombinaci s rekurzí mohou vést k drastickému snížení výkonu systému.
- Opětovné použití je velmi komplikované a vyžaduje neustálé refaktorování.
- Psaní programů rekurzivním stylem namísto použití smyček nebo smyček může být velmi skličující úkol..
- Objekty nemusí správně představovat problém.
- Ačkoli se psaní čistých funkcí ukázalo jako snadné, jejich kombinace se zbytkem aplikace a se vstupně / výstupními operacemi je docela obtížné
Programování umělé inteligence se provádí ve funkčních programovacích jazycích a techniky umělé inteligence migrují na aplikace v reálném světě.
Vyniká také v implementaci složitých matematických modelů. Z tohoto důvodu je jedno z hlavních použití funkčních jazyků tradičně akademické. Je užitečné pro vývoj spustitelných specifikací a implementací prototypů.
Mnoho funkčních jazyků také vyniká při implementaci paralelního zpracování. To je způsobeno jeho schopností využívat výhody čistých funkcí, které vždy vracejí stejnou hodnotu bez ohledu na pořadí, ve kterém jsou prováděny..
WhatsApp používá programovací jazyk Erlang, který se řídí modelem funkčního programování, což umožňuje více než stovce jejích zaměstnanců zpracovávat data patřící přibližně 1,6 miliardám lidí.
Dalším důležitým nosičem stylu funkčního programování je Haskell. Používá jej Facebook ve svém antispamovém systému. I JavaScript, jeden z nejpoužívanějších programovacích jazyků, se chlubí vlastnostmi funkčního jazyka dynamického typu.
Byl navržen po C ++ a získal všechny jeho výhody a zároveň eliminoval jeho pozorované slabé stránky, že musí být kompatibilní s C.
Je vysoce škálovatelný a souběžný, takže je ideální pro telekomunikační a jiné aplikace, které přijímají obrovské množství dat v nepředvídatelném pořadí..
Jedná se o čistě funkční programovací jazyk, který používá Lambda kalkul.
Používá se v matematických, vědeckých, finančních, analytických a jiných aplikacích. Jednou z jeho silných stránek je výroba softwaru pro zpracování dalších programů.
Jedná se o otevřený zdrojový jazyk založený na Caml. Má tendenci vytvářet velmi odlehčené programy, které jim pomáhají načítat a běžet rychleji než programy vytvořené v jiných jazycích.
Je založen na syntaxi LISP a struktuře ALGOL. Díky své jednoduchosti se používá v mnoha kurzech informatiky jako úvod do designu programu, aby ukázal některé základy počítačového programování.
Zatím žádné komentáře