Jeg (Nikolaj Brinch) havde her kl.14 valgt at hører lektioner som GridGain (Cloud firma) havde lært om Functional Programming in Java (hvorfor er der iøvrigt ikke nogle Fortress indlæg her på JavaOne? – Det var jo åhh så hot på et tidspunkt – kan det være at det blive overflødiggjort af Erlang, Haskell og andre sprog, eller nogle af de glimrende implementationer af lignende sprog på JVM, f.eks. Scala. Ligesom lambda udtryk nu finder vej til selveste Java? Nå nok om Fortress det var vist et sidespring).
En tyk mand i grimt tøj skulle nu fortælle om hvad det var GridGain havde lært på den hårde måde… Han talte rigtig svært forståeligt engelsk (han er founderen af GridGain).
Faktisk kan man downloade GridGains eksempler (de har beholdt både de gamle og selvfølgelig de nye), så man kan sammenligne Java koden med Scala – super cool.
Den tykke mand vandrede hvileløst rundt på scenen, hvilket knirkede og larmede helt vildt – så stå dog stille mand!
Han gennemgik i starten Functional Programming (FP) 101, hvilket han gjorde super godt – så alle kunne være med, og forskellene til Imperativ Programming (IP).
Lesson: Du kan prøve et FP library, men du ender faktisk med at skrive mere kode (casts, annonyme inder klasser osv.), så stay away from lambdaj osv. Scala rules.
Brug type aliases (typedefs) så din kode biver kort og concise.
Så gik vi til kode eksempler som var Java??? Altså deres eget FP style library til Java. Vi blev så ved med at se eksempler på dette. Det var da interessant, men mange af tingene er jo vist 200 gange. Derefter blev det også noget rodet.
Immutability Actually Works – Brug det! CPU og hukommelses ineffektivitet er meget overdrevet.
De havde brugt predicates, således at de kunne lave et predicate som tog en node (i deres grid/cloud/cluster) og fandt ud af om f.eks. CPU forbruget var under 20%. Den kunne de så kalde en closure på som udførte en funktion på noden. Det er super smart da det så er dynamisk (og dynamiciteten ligger i FP), således at hver gang de kaldte denne function, ville den finde det subset af noder hvor predikatet var sandt, og sætte dem til at lave noget.
Han reklaremede for Tuples i Java, men det er bare så grimt. Jeg er ikke sikker på jeg er enig. Jeg har været nede af Pair, Tuple3, Tuple4 ruten (det han havde lavet var jo typestærke tupler). Tupler er i mine øjne Maps eller Object[], eller rigtige POJOs. Ellers er der noget mærkeligt ved ens program. Dette er selvfølgelig løst elegant i FP.
Så var der lige en til, nemlig at han var stor fortaler for checked exceptions (http://www.mindview.net/Etc/Discussions/CheckedExceptions), men det virker som bekendt ikke i functional style Java.
Alt i alt var det faktisk temmelig interessant, men en noget rodet affære. De vil dog nu flytte til Scala 100% i fremtiden – og så er GridGain OSS til inspiration.