Klíčový rozdíl – Funkční programování a imperativní programování
Klíčový rozdíl mezi funkčním programováním a imperativním programováním je v tom, že funkcionální programování považuje výpočty za matematické funkce a vyhýbá se změně stavu a proměnným datům, zatímco imperativní programování používá příkazy, které mění stav programů.
Programovací paradigma poskytuje styl budování struktury a prvků počítačového programu. Programovací paradigmata pomáhají klasifikovat programovací jazyky na základě jejich vlastností. Programovací jazyk může ovlivnit více paradigmat. V objektově orientovaném paradigmatu je program strukturován pomocí objektů a objekty předávají zprávy pomocí metod. Logické programování může vyjádřit výpočet výhradně v termínech matematické logiky. Další dvě programovací paradigmata jsou funkcionální programování a imperativní programování. Funkcionální programování umožňuje vyjádřit výpočty jako vyhodnocení matematických funkcí. Imperativní programování poskytuje příkazy, které explicitně mění stav paměti. Tento článek pojednává o rozdílu mezi funkčním programováním a imperativním programováním.
Co je funkční programování?
Funkční programování je založeno na matematice. Klíčovým principem funkcionálního programování je, že všechny výpočty jsou považovány za kombinaci samostatných matematických funkcí. Matematická funkce mapuje vstupy na výstupy. Předpokládejme, že existuje funkce nazvaná f(x)=xx. Hodnota x 1 je mapována na výstup 1. Hodnota x 2 je mapována na výstup 4. Hodnota x 3 je mapována na výstup 9 a tak dále.
Obrázek 01: Příklad funkcionálního programovacího jazyka – Haskell
Ve funkčním programování se berou v úvahu vzory. Funkční programovací jazyky Haskell používají níže uvedenou metodu k nalezení součtu čísel.
Funkce součtu má celočíselné hodnoty a výsledkem bude také celé číslo. Lze jej zapsat jako součet: [int] -> int. Sčítání lze provést podle níže uvedených vzorů.
sum[n]=n, součet jednoho čísla je samotné číslo.
Pokud existuje seznam čísel, lze jej zapsat následovně. n představuje první číslo a ns představuje další čísla
součet (n, ns)=n + součet ns.
Výše uvedené vzory lze použít k nalezení součtu tří čísel, která jsou 3, 4, 5.
3 + součet [4, 5]
3 + (4 + součet [5])
3+ 4 + 5=12
O funkci nebo výrazu se říká, že má vedlejší účinky, pokud modifikuje nějaký stav mimo svůj rozsah nebo má pozorovatelnou interakci s jeho volajícími funkcemi kromě návratové hodnoty. Funkční programování minimalizuje tyto vedlejší účinky. Změny stavu nezávisí na funkčních vstupech. Je to užitečné pro pochopení chování programu. Jednou z nevýhod funkcionálního programování je, že učení se funkcionálnímu programování je těžší ve srovnání s imperativním programováním.
Co je to imperativní programování?
Imperativní programování je programovací paradigma, které používá příkazy, které mění stav programu. Zaměřuje se na popis toho, jak program funguje. Programovací jazyky jako Java, C a C jsou imperativní programovací jazyky. Poskytuje postup krok za krokem, co dělat. Imperativní programovací jazyky obsahují struktury jako if, else, while, pro smyčky, třídy, objekty a funkce.
Obrázek 02: Příklad imperativního programovacího jazyka – Java
Součet deseti čísel lze v Javě nalézt následovně. V každé iteraci je hodnota i přidána k součtu a přiřazena k proměnné součtu. V každé iteraci se hodnota součtu neustále přidává k dříve vypočítanému součtu.
int součet=0;
for (int i=0; i<=10; i++) {
součet=součet + i;
}
Imperativní programování je snadné se naučit, pochopit a ladit. Je snadné najít stav programu díky použití stavových proměnných. Některé nevýhody jsou, že kód může být zdlouhavý a může také minimalizovat škálovatelnost.
Jaká je podobnost mezi funkčním programováním a imperativním programováním?
Jak funkcionální programování, tak imperativní programování jsou programovací paradigmata
Jaký je rozdíl mezi funkčním programováním a imperativním programováním?
Funkční vs imperativní programování |
|
Funkční programování je programovací paradigma, které považuje výpočty za vyhodnocení matematických funkcí a vyhýbá se změně stavu a proměnným datům. | Imperativní programování je programovací paradigma, které používá příkazy, které mění stav programu. |
Struktury | |
Funkční programování obsahuje volání funkcí a funkce vyššího řádu. | Imperativní programování obsahuje if, else, while, pro smyčky, funkce, třídy a objekty. |
Programovací jazyky | |
Scala, Haskell a Lisp jsou funkční programovací jazyky. | C, C++, Java jsou imperativní programovací jazyky. |
Focus | |
Funkční programování se zaměřuje na konečný výsledek. | Imperativní programování se zaměřuje na popis toho, jak program funguje. |
Jednoduchost | |
Funkční programování je těžké. | Imperativní programování je jednodušší. |
Shrnutí – Funkční programování vs imperativní programování
Programovací paradigma poskytuje styl budování struktury a prvků počítačového programu. Funkční programování a imperativní programování jsou dva z nich. Rozdíl mezi funkčním programováním a imperativním programováním je v tom, že funkční programování považuje výpočty za matematické funkce a vyhýbá se změně stavu a proměnným datům, zatímco imperativní programování používá příkazy, které mění stav programů.