(Bilde: Oracle, montasje: Harald Brombach)

Java 8 og funksjonell programmering

– Det er bare å brette opp ermene, hevder Fredrik Vraalsen.

DEBATT: Java 8 er på trappene, og med det kommer de største endringene i programmeringsspråket Java på over 10 år. Java får endelig ordentlig støtte for funksjonell programmering!

Funksjonell programmering har de siste årene opplevd en renessanse. Denne programmeringsstilen gjør det mulig både å forenkle koden, gjøre den mer robust og utnytte maskinressursene bedre.

En av hovedgrunnene til denne renessansen er at dagens maskinvare tilbyr stadig større grad av samtidighet. Enkeltmaskiner får flere og flere prosessorkjerner; selv mobiltelefoner har 4 kjerner i dag. I tillegg knytter man gjerne sammen mange maskiner til større systemer. For å utnytte disse ressursene må oppgavene deles opp slik at de kan utføres samtidig.

Artikkelforfatter Fredrik Vraalsen jobber som systemutvikler i Iterate.
Artikkelforfatter Fredrik Vraalsen jobber som systemutvikler i Iterate.

Java 8 lar oss skrive kode som er mer uttrykksfull og høynivå. Vi sier hva vi ønsker å utføre; ikke hvordan det skal gjennomføres i minste detalj. For-løkker og if-setninger erstattes av konsepter som å filtrere, transformere og slå sammen data. Et resultat er at systemene står friere til å håndtere detaljene for oss, for eksempel ved å dele opp beregningene på tvers av de tilgjengelige prosessorkjernene.

En kanskje enda viktigere grunn til å ta i bruk funksjonell programmering i Java 8 er for å redusere kompleksitet. Systemene vi bygger blir stadig større og mer komplekse, og det er vanskelig å ha oversikt over alle interaksjoner og avhengigheter. Løsningen i objektorienterte systemer skulle være gjenbruk av komponenter og domeneobjekter, men denne gevinsten har i stor grad uteblitt.

Disse små og enkle byggeklossene kan settes sammen på et utall måter, nesten som å bygge lego. Funksjonell programmering tilbyr gjenbruk på en annen måte. Man tar små og enkle funksjoner og setter dem sammen til større beregninger, ved hjelp av et lite knippe abstraksjoner. Disse små og enkle byggeklossene kan settes sammen på et utall måter, nesten som å bygge lego. Resultatet er kode som er mer høynivå og lettere å lese enn vanlig objektorientert kode, nærmest som en lærebok i domenet og forretningslogikken. Samtidig er koden mer konsis, den inneholder langt mindre såkalt «boilerplate»-kode som bare er til for å tilfredsstille utviklingsverktøy og kompilatoren.

Vi får med andre ord mindre kode å skrive, og ikke minst mindre kode å lese, forstå og vedlikeholde.

Et typisk motargument mot å ta i bruk funksjonell programmering er at det krever for mye opplæring. Java 8 tilbyr en hybdrid-løsning med støtte både for objektorientert og funksjonell kode. Her slipper man å starte på bar bakke, men får en glidende overgang og kan plukke opp nye konsepter underveis. Erfaring tilsier at utviklere raskt kommer igang med de grunnleggende konseptene og blir mer produktive på kort tid.

Alle programmeringsspråk og -paradigmer har sine styrker og svakheter. Kunsten er å kjenne disse slik at man kan ta riktige valg på hvilke metoder man skal benytte i hvilke sammenhenger. Funksjonell programmering løser mange av problemene vi har foran oss i dag og bør definitivt være en del av verktøykassa. Så det er bare å brette opp ermene, lære seg de nye språkelementene i Java 8 og ta de i bruk!

Til toppen