Poprvé jsem se něco konkrétnějšího o funkcionálním programovaní dozvěděl před pár lety v Praze na jedné z přednášek Tomáše Petříčka. Tam také zmínil svoji knihu Real world functional programming. Celé to znělo docela zajímavě a já jsem si řekl, že se na tu knížku někdy podívám. Chvilku mi to trvalo, ale nakonec se čas našel a já se můžu podělit o dojmy z její četby.
Titul (Real world functional programming) a podtitul (With examples in F# and C#) celkem jasně naznačují, co lze najít uvnitř. Je to kniha o funkcionálním programování obecně, ne přímo učebnice konkrétního jazyka, ale jde ji více o praktickou aplikaci než o přehnaně podrobnou teorii. Příklady jsou ve dvou .NET jazycích – funkcionálním F# a objektovém C#, přičemž řada příkladů je v obou jazycích, což umožňuje přímé srovnání přístupů. A když už je řeč o C#, nesmím opomenout spoluautora knihy, jímž je Jon Skeet (autor C# in Depth).
Po knize o funkcionálním programování jsem sáhnul ze dvou hlavních důvodů – za prvé jsem se chtěl dozvědět více o “funkcionální filozofii” a za druhé lépe porozumnět funkcionálním vlastnostem C#. A myslím, že toto přesně Real world functional programming zvládá skvěle.
C# obsahuje mnoho vlastností inspirovaných funkcionálními jazyky, které vyžadují trochu jiný způsob myšlení než klasické objektově-oritentované programování, a proniká do něj i funkcionální terminologie. Pamatuji si, jak jsem se učil LINQ a byl trochu zavalen všemi těmi (tehdy pro mě novými) termíny jako lambda calculus, closures a podobně. Přestože by mi tehdy jistě pomohlo, kdybych o funkcionálním programování věděl více, nejspíš má pro mě Real world functional programming větší hodnotu teď, když dokážu porovnávat s implementací v C#.
Co mi ta kniha dala?
Hlavně konkrétnější představu, co to vlastně funkcionální programování je, jaké postupy používá a jaké výhody přináší. Přestože nemám v tuto chvíli ambice začít programovat v nějakém funkcionálním jazyku, řada věcí je aplikovatelná i jinde – něco je spíše o způsobu myšlení, něco lze využít proto, že i primárně objektové jazyky nyní zahrnují funkcionální vlastnosti (nejde jen o C# či VB.NET, ale i třeba o Javu).
Konečně si dokážu představit, jak se dá prakticky programovat s neměnnými (immutable) typy.
Objevil jsem eleganci funkcionálního programování – některá prezentovaná řešení jsou zkrátka cool. A všechny ty částečné aplikace funkcí (partial function applications), skládání funkcí, rekurzivní definice typů včetně nekonečných atd. mi tak mimochodem připomněly, že funkcionální programování má blízko k matematice.
Lze očekávat, že se s funkcnionálními myšlenkami budeme v budoucnu setkávat ještě více než nyní. Například – přestože to není v knize řešeno (vzhledem k roku jejího vydání), je zřejmé, že podpora pro async/await v .NET 4.5 má hodně společného s asynchronními workflow, které jsou v knize popsány. Zkrátka funkcionální postupy mají co nabídnout a tvůrci současných objektových jazyků jsou si toho vědomi.