Lambdauttryck i Java innebär ett sätt att skriva programkod som är ovant för många. Ett mycket enkelt sätt att förklara vad lambdauttryck är, är att mer logik pressas in i anropen av funktioner. Det ska leda till att det krävs mindre programkod för att lösa en uppgift och att den programkod som skrivs ska bli enklare att förstå än tidigare.

Det här betyder att det går att skriva Javakod som påminner mer om funktionella språk som Scala än tidigare.

Även om lambdbauttryck, eller ”closures” som de kallas ibland, är mycket omtalade bland den hårda kärnan av Javafantaster så är andra intressenter ofta förvirrade. ”Vad är egentligen ett lambdauttryck?”, är en fråga som är svår att besvara för den oinitierade. Men det är en viktig fråga för alla som är inblandade i projekt som inbegriper Java och för alla som fattar beslut rörande mjukvara som utvecklas med Java.

Lambdauttryck ger en potential att skriva bättre programkod och att driva utvecklingsprojekt på ett effektivare sätt.

Med det i åtanke är det inte så konstigt att den engelska Javaexperten Richard Warburton höll ett föredrag om lambdauttryck i den stora salen på konferensen Jfokus i Stockholm nyligen. Han försöker lyfta upp ämnet till en hög abstraktionsnivå:

– Ett viktigt mål med lambdauttryck är att de ska leda till bättre bibliotek med färdig kod, säger Richard Warburton.

Han ägnar minst lika mycket tid åt att berätta vad lambdauttryck inte är, som att berätta om vad de är. Hans utgångspunkt är att det finns många myter om lambdauttryck. Han verkar bekymrad över att missuppfattningar försvårar användningen av dem. Han retar sig till exempel på att det är så mycket diskussioner kring hur syntaxen för lambdauttryck ser ut:

– Visst är syntaxen viktig till viss del, men inte när man lärt sig den.

Slutsatsen att dra är att koncentrera sig på de fördelar lambdauttryck kan ge, inte på hur de ska skrivas.

Richard Warburton medger dock att det finns problem med lambdauttryck, till exempel att det kan vara svårt att testa dem. En väg runt det problemet är att koncentrera sig på att testa omkringliggande kod. Det ska åtminstone fungera bra för enkla lambdauttryck. Relaterade problem är att det kan vara svårt att avlusa, ”debugga”, lambdauttryck och även att formulera bra beskrivningar av kompileringsfel.

– Det behövs nya sätt att testa och avlusa programkod med lambdauttryck.

Bland hinder för lambdauttryckens popularitet och för att folk ska anamma funktionell programmering överhuvudtaget nämner Richard Warburton att många som testar de nya sätten att skriva kod börjar med att skriva traditionell kod som är lite förändrad. Det innebär dels att inte alla vinster realiseras, dels att det blir svårare att komma in i det nya sättet att koda.

Han berättar också att lambdauttryck kan vara krångliga och visar ett exempel på hur en mycket namnkunnig programmerare strular till det. Programmeraren var mycket nära att skriva rätt direkt, vilket skulle resulterat i väldigt kraftfull programkod. Men i stället trasslade han in sig i flera sidor komplicerad och onödig programkod.

Det känns som en bra sammanfattning av lambdauttryck i Java: Mycket kraftfulla för den som förstår hur de fungerar, men också en komplicerande faktor för den som inte förstår.

Fakta

Ett programmeringsspråks syntax är den samling regler som definierar godkända kombinationer av symboler, till exempel ord, i programkod.