Java er død, lenge leve JVMen!
Java har lenge vært kongen på tronen i IT-Norge og blir brukt på utallige prosjekter. Miljøet rundt Java er modent og vi har gode rammeverk. Java er trygt og kjent, og Java Virtual Machine (JVM) er en god platform. Java og platformen fungerer.
Så hva er problemet? Java er teknisk gjeld og det er på tide å modernisere stacken.
Teknisk gjeld sa du?
Det finnes mange typer av teknisk gjeld og en av de vanligste er dårlig kode, men teknisk gjeld er så mye mer. Det er JavaScript appen som ikke er over på TypeScript, det er den bygg-serveren din som ikke har blitt modernisert på flere år, det er den testen du burde ha skrevet men ikke har fått gjort enda, og det er Java-koden din.
Teknisk gjeld er et kjempenyttig verktøy og uten teknisk gjeld vil det å utvikle gode løsninger ta mye lengre tid. Vi tar snarveier, tar opp et lån i form av teknisk gjeld, lager gode løsninger og vurderer om den gjelden vi har tatt opp må betales tilbake, eller om vi kan leve med litt gjeld. Ha et forhold til hvor mye teknisk gjeld som er greit for ditt prosjekt!
Vi har mye Java-kode og oppfordringen min er ikke å kaste den Java-koden vi bruker i dag.
Det å skrive en ny frontend-applikasjon i JavaScript og ikke TypeScript i dag er teknisk gjeld. Og det samme vil jeg si for Java. I dag finnes det et moderne alternativ til Java. Kotlin! Så min oppfording er: slutt å skriv ny Java-kode. Ta steget og skriv den nye koden din i Kotlin.
Så hvorfor Kotlin?
Den gode nyheten er at man kan bruke Java og Kotlin i samme prosjekt. Kotlin har ekstremt god interop med Java, og det vil si at man kan inneføre ny Kotlin-kode uten å måtte tilpasse den gamle Java-koden din. Man kan bruke Java-kode fra Kotlin, og Kotlin-kode fra Java som om det skulle vært samme språk.
Så hva er fordelen med å gå over til Kotlin og hva kan Kotlin tilby som Java ikke kan?
Digg syntaks. Kotlin introduserer mye syntakssukker. Default arguments, lambdas med implicit arguments, data classes, let/apply for å lage nye scopes, expression functions og extension functions. Det er rett å slett for mye til å liste. Sjekk Kotlin Syntax og Kotlin Idioms for eksempler.
Et bedre standard library. Standard-librariet til Kotlin inneholder en haug med funksjoner som gjør livet enklere. Jeg blir stadig overrasket over at akkurat den funksjonaliteten jeg trenger dukket opp på autocomplete. Liste-APIet inneholder blant annet associate
, groupBy
, chunked
og mapIndexed
for å nevne noen.
String templates. Ikke noe mer StringBuilder, i Kotlin har man muligheten til å bruke string-templates. Både for enkle tekster, men også for tekster som går over flere linjer. "Det er ${positivtOrd}!"
Smart-casting. Kotlin kompilatoren er smart. Når man har sjekket en type med if
/when
vil kompilatoren forstå det det vi jobber med er typen vi sjekket mot. Ikke noe unødvendig type-casting påkrevd.
Null-safety. Null-håndtering er innebygd i typesystemet og gjør det mye enklere å håndtere nullable-types. Ingen* flere NullPointerExceptions og try/catches for å håndtere null er en ting av fortiden. (* obs: man kan fortsatt få NPE når man jobber mot Java-kode)
Bedre støtte for generics. Kotlin kommer med bedre støtte for generics. Med inline reified types kommer man seg rundt problemet med type-erasure og man kan sjekke typer på generics i runtime som i Java ville vært borte.
Nye måter å strukturere koden på. Extension functions som et alternativ til utils-funksjoner som lar deg utvide funksjonalitet på kode utenfor kodebasen du er i. Funksjoner som first class citizens. Og ingen en-til-en relasjon mellom klasse og fil.
… og mye mere. Sjekk ut den offisielle dokumentasjonen for mer snacks!
Hva nå?
Ta steget. Tør å ta steget til å skrive ny kode i Kotlin og slutt med Java. Du kan fortsatt bruke de kjente bibliotekene, rammeverkene og den eksisterende Java-koden din. Læringskurven er lav og med Kotlin vil du få en mye bedre utviklingsopplevelse. Språket er moderne, platformen er den samme, syntaksen er digg og du vil få nye verktøy for å skrive vakker og lesbar kode.
Så hva venter du på? Start med Kotlin i dag.