<img height="1" width="1" src="https://www.facebook.com/tr?id=1272750026111903&amp;ev=PageView &amp;noscript=1">

5 grunner til å lære seg Kotlin i 2019

Jarle Hansen | 02. mai 2019

Populariteten til Kotlin har i de siste årene økt kraftig, som vises blant annet i Stack overflow sin Developer survey results 2018. Mange tenker automatisk på Android-utvikling når de hører Kotlin, men det er så veldig mye mer. I denne artikkelen vil jeg presentere 5 grunner til at jeg mener Kotlin er et språk som er verdt å ta en nærmere titt på i 2019. 

 1. Kompabilitet med Java

Kotlin er laget med tanke på interoperabilitet med Java. Det er enkelt å kalle Java fra Kotlin og Kotlin fra Java.

 

I eksempelet over så vil det bli laget en liste som inneholder 2 String verdier. Hvis du forsøker å kjøre eksempelet så vil man også se at values er av typen class java.util.Arrays$ArrayList. Dette er en vanlig Java-klasse som benyttes, og det viser noe av strategien til Kotlin. Språket benytter Java i bunn og bygger på med ekstra funksjonalitet. Det er dette som gjør integrasjonen mellom Kotlin og Java så god.

 

 

Ekstra funksjonalitet legges på med extension functions, slik som er vist i eksempelet over. Her kalles first( ) på values, dette er en funksjon som ikke er tilgjengelig i Java (vi skal ta en nærmere titt på extension functions senere).

Den gode integrasjonen mellom Java og Kotlin er veldig viktig fordi 1) Man kan introdusere Kotlin gradvis og 2) biblioteker/rammeverk laget for Java vil også fungere med Kotlin.

2. Null safety

Jeg vil tro at alle Java-programmerere som har laget noe mer avansert enn HelloWorld vil ha truffet på NullPointerException. Målet med Kotlin sitt type system er å forhindre null referanser. Det er vanskelig å oppnå dette 100%, spesielt med tanke på integrasjon med Java kode, men Kotlin sin fremgangsmåte er fornuftig.

I Kotlin er variablene "non nullable" som standard. Det betyr at hvis man skriver "val name: String" så kan ikke name bli satt til null. Hvis man forsøker å sette den til null ender det opp med en kompileringsfeil. Hvis man trenger å sette en variabel til null så gjøres dette med å legge på spørsmålstegn etter typen: "val name: String?". I motsetning til Java må man ta et aktivt valg om at denne variabelen kan bli null eller ikke.

 

I Java blir det fort veldig mange “if(value != null) {}” sjekker i koden. Kotlin har en veldig praktisk måte å unngå gjentatte null-sjekker på som heter safe call operator “?.

Se også: Kotlin frokostseminar 6. juni

Dette er spesielt nyttig hvis du feks har et objekt som inneholder et annet objekt og begge kan være null. Hvis et av stedene har verdien null, så blir det returnert null.

 

 

Elvis operator “?:” er en annen nyttig feature. Den går ut på at hvis det er en verdi (den er ikke null) så bruk den, hvis det er null så benytt verdien som er spesifisert til slutt.

 

 3. Data classes

I mange tilfeller trenger vi å lage klasser som holder på dataene. I Java vil dette typisk bety å generere opp getters/setters, og kanskje også implementere equals(), hashCode() og toString(). Ofte vil dette bli ganske mye kode. Det er mulig å kutte ned på antall kodelinjer med å benytte et bibliotek som Project Lombok. Dette hjelper, men Kotlin kan gjøre dette enda bedre med data klasser og uten å trenge en ekstra avhengighet.

 

Som vist i eksempelet over så er data classes i kotlin er laget for å holde på data. Den vil automatisk sørge for equals(), hashCode() og toString(). I tillegg vil det automatisk bli laget gettere (og potensielt settere med var).

Data klasser har også en copy () funksjon. I Kotlin er det fokus på immutability, det betyr at etter et objekt er laget så kan det ikke endres. Ved å lage objektet og kalle copy () så vil man få en kopi (man vil ikke endre den orginale instansen), på denne kopien kan man endre en eller flere av verdiene fra det orginale objektet.

 

 4. Extension functions

Extension function er en viktig del av Kotlin. Mye av standard funksjonaliteten i Kotlin er bygget med extension functions, som feks first () funksjonen vi så på i et tidligere eksempel.

Extension functions gjør det mulig å legge på ekstra funksjonalitet på en eksisterende klasse uten å måtte benytte arv eller feks decorator pattern.

La oss se på et enkelt eksempel.

 

 

 

Her legger vi på en forenklet palindrome-funksjon på String. Dette gjør at vi kan kalle denne funksjonen på helt vanlige String verdier. Extension functions er en svært nyttig feature som i mange tilfeller vil kunne gjøre koden mer naturlig og lesbar. Ofte vil denne funksjonaliteten kunne erstatte det vi bruker statiske utility-metoder i Java til.

Det er mulig å lage extension functions på klasser som er skrevet i Java. I neste eksempel skal vi se på hvordan vi kan ta klassen java.util.Properties, som er del av standard Java, og legge på en funksjon for å finne properties hvor navnet starter på en gitt verdi.

 

 

 

 

 5. Named arguments / default parameter values

Et vanlig pattern som brukes i Java er Telescoping constructor. Dette går ut på at man har flere konstruktører med ulike antall input parametere. På denne måten kan man sette default verdier på visse parametere når de ikke sendes inn i konstruktøren. I Kotlin løses dette med named og default parameter values.

Named arguments gjør det mulig å navngi det input parameteret man sender inn (kan være både i en vanlig funksjon og konstruktør).

 

 Dette har fordeler ved at koden kan bli mer lesbar, for eksempel i de tilfellene det er mange parametere. I tillegg er man ikke tvunget til å følge rekkefølgen til parameterne i funksjonen, i eksempelet over kunne vi godt startet med address før name.

Default arguments gir oss muligheten til å sette standard verdier på en parameter. Denne standard verdien vil bli brukt hvis det parameteret ikke sendes inn.

 

 

 

For person1 sendes ikke address inn og denne vil dermed få standard verdien “Veien 1”. For person2 sender vi inn både name og address og den vil da overskrive standardverdien og få “Veien 2” satt.

Kombinasjonen av named og default arguments gjør at vi ofte slipper å definere flere konstruktører. Det gjør også at koden kan bli mer lesbar og man kan i mange tilfeller slippe å skrive mye unødvendig kode.

Oppsummering

Det finnes mange flere grunner til at Kotlin er et språk du burde undersøke (if og try/catch er expressions, when, reified types, coroutines osv osv). Jetbrains har et estimat på at man sparer 40% kode ved å bruke Kotlin i forhold til Java, med å produsere samme funksjonalitet.

Vil du lære mer så anbefaler jeg å ta en titt på boken Kotlin in Action. Også vil jeg gjerne at flere blir med på Oslo Kotlin meetup hvor vi jevnlig har foredrag om ulike Kotlin-relaterte temaer, som feks coroutines, Kotlin/Native, testing in Kotlin og Kotlin på Android.

Jeg håper denne introduksjonen til Kotlin kan være motiverende for å prøve ut språket, også på back-end prosjekter. Og siden Kotlin og Java fungerer så godt sammen, hvorfor ikke introdusere det litt etter litt?

 

Lyst til å lære mer om Kotlin? 6. juni arrangerer vi frokostseminar. Les mer og meld deg på her

Frokostseminar_Kotlin

Del på sosiale medier: