- Aký programovací jazyk zvoliť na budovanie škálovateľných cloudových riešení?
- V akom jazyku programovať AI alebo hudbu?
- Ako rýchlo vyrobiť nástroj na prácu so zoznamom dát?
- Ako byť produktívny, deklaratívny a nestratiť sa v riešení stavu aplikácie pri tisíckach užívateľov?
Funkcionálne programovanie získava na popularite hlavne v prostredí distribuovaného computingu, v cloude. K tomu ho predurčuje jeho základná vlastnosť, bezstavová funkcionálna kompozícia, kde výsledok jednej funkcie je parametrom ďalšej. Dáta sú kód, kód sú dáta.
Uvedomili si to napríklad aj v jednom softvér house, ktorý sa rýchlo stal úspešnou bankou s backend riešením postaveným na funkcionálnom programovaní, pozrite si napríklad inšpirujúce video: “Real-time Financials with Microservices and Functional programing”
alebo toto video s frontend riešením vytvoreným vo funkcionálnom jazyku „Using Clojurescript to launch iOS/Android apps to 1M users“
Funkcionálne programovanie teoreticky vychádza z Lambda calculus konceptu vytvoreného Alonzom Churchom.
Lambda calculus bol implementovaný v programovacom jazyku LISP, v ktorom boli napísané známe aplikácie ako editor Emacs alebo vedomostný systém CyC.
Na sile získava aj vďaka implementácii v jazyku Clojure, dynamickom funkcionálnom jazyku bežiacom na Java Virtual Machine, JVM, kde zúžitkuje a vie využiť aj Java metódy a stovky overených Java knižníc. Ale nie je hybridom ako napríklad Scala.
Na poli teórie počítačovej vedy sa vymyslelo a publikovalo mnoho skvelých nápadov a konceptov. Clojure obsahuje mnoho z najnovších a najväčších z týchto myšlienok, ktoré zatiaľ nenašli dobré (alebo žiadne) implementácie v iných jazykoch. Najzreteľnejšie sú tie, ktoré sa týkajú paralelného spracovania: Softvérová transakčná pamäť a spracovanie založené na agentoch sú zapracované do jazyka na základnej úrovni. Iné (napríklad pretrvávajúca nemennosť – persistent immutability) sú jemnejšie dizajnérske filozofie, ktoré sú syntézou moderného akademického výskumu a desaťročí reálnych skúseností z projektov.
Koncept Clojure je čisto funkcionálny a deklaratívny. Rozdiel medzi funkcionálnym a imperatívnym programom je znázornený na obrázku.
V Clojure je všetko zoznam. Všeobecný (prvky) alebo špecifický ako mapa {kľúč hodnota}, vektor [prvky], množina #{unikátne prvky}. A to je vlastne celá štruktúra jazyka Clojure. Samozrejme plus zopár kľúčových slov, ktoré sú však tiež len zoznamy.
Všetko čo potrebujete pre základný beh prostredia Clojure je JVM a príkazový riadok. Clojure podporuje takzvaný REPL, Read, Evaluate, Print, Loop mód, ktorý poskytuje výhodu interaktívneho a iteratívneho developmentu s okamžitým testovaním a kompiláciou.
V princípe stačí zadať do terminálového okna
java -jar clojure-1.8.0.jar
a spustí sa interaktívny REPL mód. Clojure však má aj automatizačný generátor lein na vytváranie a riadenie Clojure projektov, ktorý taktiež poskytuje aj REPL mód. Je veľmi užitočné si ho nainštalovať, obsahuje množstvo templates na rôzne typy projektov a je samozrejme ľahko rozšíriteľný ako všetko v Clojure. Začnime teda:
Majme zoznam prirodzených čísel, v praxi napríklad telefónnych a chceme vyfiltrovať len párne. Zadefinujeme zoznam čísel ako Clojure zoznam, reprezentovaný okrúhlymi zátvorkami (def cisla [1 2 3 4 5 6 7 8]). Odklepneme, REPL spracuje, vytlačí výsledok a čaká na ďalší vstup.
Prvé slovo reprezentuje vyhradený výraz pre definíciu, druhé je názov zoznamu, tretia položka v hranatých zátvorkách je vektor čísel, môžme ho nahradiť zoznamom makra rozsahu (range 1 101), ktorý poskytne sekvenciu čísel od 1 po 100. Zo zoznamu cisla urobíme daľší zoznam s okrúhlymi zátvorkami (filter even? cisla), ktorý je dostatočne samovysvetľujúci. Stručné a efektívne.
Skúste napríklad filter z regulárným výrazom (apply str (re-seq #”[a-zA-Z]” “abc:sQ/SDQ_”))
Alebo zosumovať čísla od 1 po 100 pomocou redukcie. Tá može pracovať v sekvenčnom, ale aj paralelnom móde ako napr. Fork/Join v Jave. Sila.
Kde je reduce je aj map
Silu Clojure si môžete vyskúšať aj pri vyhľadávaní palindrómov. Palindróm je postupnosť symbolov, ktorá má tú vlastnosť, že ju možno čítať v ľubovoľnom smere (sprava doľava alebo zľava doprava) a má vždy rovnaký význam.
Snáď vás sila Clojure už v tomto krátkom úvode nadchla a bude sprevádzať odteraz naďalej.
Ak chcete odhaliť aj krásu, skúste sa pozrieť na http://lighttable.com/, editor novej generácie napísaný v Clojure, ClojureScripte.
Nabudúce, krátky program na zbieranie (scraping) dát z tabuliek na webstránkach.