Programováním, potažmo tvorbou SW se zabývám
nějakých 30 let. Začátky v šesté třídě na IQ 151 nelze brát vážně, ale
seriózně se programováním zabývám více než 20 let. Za tu dobu jsem
poznal kromě "běžných" procedurálních a objektových jazyků i jazyky
funkcionální a logické (při studiu) i deklarativní typu SQL. Díky tomu
uznávám sílu jiných přístupů, protože jeden správně napsaný update v SQL
může mít stejnou sílu jako několik desítek řádků v Javě.
Primárně mě však živí Java a tak mně před lety
docela zaujalo, že se do Javy 8 dostaly rysy funkcionálních jazyků.
Ovšem po letmém seznámení se s implementací jsem začal být skeptický
a k využití nových rysů jsem se dlouho nemohl odhodlat. Až v poslední
době jsem si s tím trochu pohrál v práci a následně jsem si chtěl
soukromě porovnat výkonnost a přehlednost kódu. Výsledek mě však spíše
zklamal a prvotní dojem byl ten, že implementace využívající
funkcionálních rysů Javy 8 není ani časově výhodnější ani syntakticky
přehlednější. Výkonnost nebyla cílem zavedení funkcionálních rysů, takže
není fér tohle Javě vyčítat, cílem bylo umožnění funkcionálního
přístupu, jenže způsob, jakým to řeší Java 8 se mi moc nelíbí a nepřijde
mi přehledný.
Postupem času jsem ale tento názor korigoval, o tom
však budou další díly. Také bych chtěl zdůraznit, že se rozhodně
nevymezuji vůči vlastním konceptům funkcionálního programování, ty jsou
super (možnost předat funkci jako parametr, mapování funkce na seznamy
a další mohou výrazně zjednodušit a zelegantnit algoritmus), ale
javovská implementace mi připadá jako syntaktický podvod, který není ani
přehledný ani elegantní.
Mým cílem je v následujících článcích implementovat
pár základních algoritmů, které jsem v práci řešil klasickým cyklem
foreach a jejich následné převedení do funkcionální podoby. Na tyto
konstrukce se podívám z hlediska výkonnosti a hlavně přehlednosti
zápisu, dále bych chtěl tytéž úlohy řešit v dalších programovacích
jazycích, abych vysvětlil, proč Javovskou implementaci nepovažuji za
elegantní. Ještě nemám jasno v tom, které jazyky použiji, mezi kandidáty
patří Ruby, Haskell, Erlang a jím inspirované Clojura a Scala, lákala
by mě i Lua. Možná dojde i na Lisp nebo Javascript, který také umožňuje
zajímavé syntaktické konstrukce. Záměrně vynechávám Perl, protože tam by
šlo vše napsat zhruba 30 způsoby více či méně čitelnými až nečitelnými.
Tuto sérii článků beru i jako výzvu, protože se
většinu z uvedených jazyků budu muset když ne naučit, tak alespoň
oprášit letité znalosti. Navíc se posledních pár let zabývám spíše
analýzou, architekturou a řízením a na vlastní kódování mi už nezbývá
tolik prostoru a času.
No a když už si s tou Javou budu hrát, tak si chci
vyzkoušet některé konstrukce a postupy, které se tu doporučují, tu zase
nedoporučují - jde o věci, které člověk běžně používá, protože někde
někdo psal, že to tak má být, ale už není čas si to reálně vyzkoušet
a ověřit.