Invaze Funkcionálních Světů

Albert Nemec
Blueberry_cz
Published in
3 min readJun 27, 2017

Byly nebyly dva hlavní programovací modely. Lambda Calculus, slavný matematický koncept, jenž dal život funkcionálnímu programování, jak ho známe dnes. Existoval také Turing Machine, který dal základy imperativním jazykům jako Java či dokonce C.

This is a Czech version of this post

Růst FP

Přestože byla minulost dominována imperativními jazyky (především C-rodinou), můžeme si všimnout, že funkcionální programování se v jedné či druhé formě neustále vrací. Javascript je například nyní více než kdy jindy funkcionální a fakt, že vídáme projekty jako Elm, Elixir či dokonce Scala je pro nás zřejmě znamením vážně se zamyslet nad tím, “jak věci děláme”. Ve světě JS se tato otázka tlačí na povrch pokaždé, kdy se vytvoří nový package (prakticky každou minutu či dvě).

Haskell aka Ježíšova matka

Abych získal nějak odpovědi, pronikl jsem do Haskellu, funkcionální matky všech. O Haskellu jste doposud asi slyšeli, že je příliš akademický k použití v reálném světě, je komplikovaný a to vše jste pravděpodobně slyšeli na univerzitě.

I přes tento hype jsem začal číst skvělou knížku, kterou doporučuji všem nezávisle na tom, v jakém jazyce pracujete nebo jakou máte rádi pizzu.

Víte, co se říká: “Naučte se C a budete umět většinu ze všech ostatních jazyků. Byl bych až moc odvážný trvdit, že naučením Haskellu se dozvíte ten zbytek. Jiné rčení na nějž jsem narazil na internetu říká: “Pokud programátor zná Haskell, pravděpodobně má cenu ho zaměstnat v nezávislosti na to, jakou technologie vaše projekty využívají.”

Co můžete očekávat?

Jakmile se rozhodnete dát Haskellu šanci, neočekávejte, že se jej naučíte celý a hned. Pro většinu jeho znalců to byl pokračující proces, kdy to zkoušeli, vzdávali a opětovně nacházeli naději. Nebudu lhát, k naučení se Haskellu na úroveň, při které budete schopni postavit celý komplexní projekt, potřebujete čas.

Nepropadejte však frustraci, že zatím nejste schopni nic postavit. Já vlastně zatím ani nechci v Haskellu nic stavět, nicméně jelikož služba k filtrování spamu na Facebooku v produkci s Haskellem pracuje, víme, že to možné je. Největším benefitem učení se Haskellu (ne znalosti, učení) je fakt, že se výrazně zlepšíte ve psaní deklarativního kódu a budete schopní pracovat ve vysoce abstraktních rovinách.

Krásy Haskellu

Váš kod je extrémně bezpečný

Protože má Haskell jeden z nejtěsnějších type systémů, je těžké ho zkompilovat. Neustále vám připomíná chyby, jež děláte. Jakmile vás však kompilátor pustí, máte velice malou pravědpodobnost, že se v něm najde chyba.

Můžete pracovat s nekonečnem

Když je Haskell “líný” (myšleno, že nebude alokovat paměť pro nic, dokud to není použito), můžete například pracovat s nekonečně dlouhým liste. Nazval bych to preventivní gargbage kolekcí.

Monady

Každý obvykle šílí když přijde na Monady. Nebudu se je snažit vysvělit, protože už tu máme hodně obsahu, který se jimi zabývá. V kostce jsou Monady speciální typy dat, jež nám pomáhají, mimo jiné, oddělovat side efekty od čistého (pure) kódu. Abyste mohli porozumět Monadům, doporučuji se nejdříve podívat do Funktory, Aplikativních Funktory a Monoidy.

A mnohem víc..

  • Minimalistický a velice čistý syntax
  • Paralelismus je jednoduchý a mocný
  • Bohatý systém psaní a typová interference
  • Hodně cool transformačních funkcí. map, filter a reduce je jen špička ledovce

!Mějte však na mysli! Jakmile jednou ochutnáte Haskell, všechny ostatní jazyky vám budou připadat neoptimální a nudné.

Závěr

Všechno, co se o Haskellu naučíte, vás udělá lepším programátorem, nečekejte však lehkou cestu. Už jen naučit se jeho základy, jako je například patttern matching vám odhalí, odkud pochází destructuring v Javascriptu a také, jak silný nástroj to může být.

Pokud vám rekurze (volání funkce unvitř sama sebe) motá hlavu, vemte si Haskell jako brilantní cvičení. Slibuju…Po Haskellu už nikdy více nepoužijete smyčky.

Tento post jsem napsal abych zjistil, jestli se lidé o toto téma zajímají. Pokud ano, prosím, nechte mi dole komentář, o čem byste si rádi přečetli příště.

--

--

Albert Nemec
Blueberry_cz

Civilian writing about programming and strange ideas in a mildly stylized and semi-digestible way.