Derfor kan Kotlin blive Java-folkets darling

Det nye JVM-sprog var på programmet på JDK IO-konferencen i denne uge. For en hverdags-forretningsprogrammør giver det mere naturlig og objektorienteret kode med færre linjer.

Det kører for Kotlin. Det unge programmeringssprog flyver op af hitlisten på popularitets-indekset Tiobe og nyder stor opmærksomhed for tiden, også på JDK IO-konferencen, som blev afholdt på IT-Universitetet i København i denne uge.

Kotlin er en del af Java-verdenen og er opfundet af den russiske afdeling af firmaet Jetbrains, kendt for udviklingsværktøjet IntelliJ IDEA, der blandt andet danner grundlag for Googles Android Studio-værktøj.

Sproget benytter statiske typer ligesom Java, men bryster sig af at kunne mere med færre linjers kode.

For nylig tilføjede Google Kotlin som mulighed til Android-udviklingsmiljøet, så man fremover kan programmere apps i sproget Kotlin. Og udviklingsværktøjer som IntelliJ IDEA og Android Studio kan oversætte Kotlin-kode til Java på helt automatisk vis.

Mere naturligt og objektorienteret og nemmere at læse koden

For franske Nicolas Fränkel, der gav et foredrag om Kotlin på JDK IO-konferencen, er der især én ting ved Kotlin, han godt kan lide, og det er ‘extension functions.’ Ligesom en tilsvarende facilitet i sproget C# betyder det, at man kan hægte nye metoder på eksisterende klasser, men på statisk vis, i modsætning til dynamiske sprog, hvor den slags er hverdagskost.

»Hvis du programmerer Java og vil tilføje en metode til String, så kan du ikke gøre det, fordi den er final og er uden for rækkevidde. Så du finder tit en ‘StringUtils’-klasse i pakker som Apache Common og Guava, (to populære basis-biblioteker til Java, red.) Du gør det samme igen og igen, fordi du ikke kan udvide klassen med dine egne metoder.«

»Forskellige sprog kan håndtere dette på forskellige måder. I Scala kan man benytte implicit, men i Kotlin kan man flette det ind direkte.«

Læs også: Her er læsernes 20 bud på programmeringssprog, de gerne vil lære

Fra udviklerens synspunkt er det mere naturligt og objektorienteret, og koden er nemmere at læse, mener Nicolas Fränkel, som ifølge sig selv ikke er nogen ‘super-programmør’, men bare en helt almindelig en af slagsen, som er svært begejstret for Kotlin.

fun main(args: Array<String>) {
    val language = if (args.size == 0) "EN" else args[0]
    println(when (language) {
        "EN" -> "Hello!"
        "FR" -> "Salut!"
        "IT" -> "Ciao!"
        else -> "Sorry, I can't greet you in $language yet"
    })
}

Et eksempel på Kotlin. Man kan eksperimentere med sproget på Try.kotlinlang.org.

At extension methods også findes i Microsofts C# kan ikke nytte, for JVM-verdenen er der, han programmerer. Og nye muligheder i Java, såsom default methods i interfaces, huer ikke Nicolas Fränkel:

»Det er ikke det samme.«

Dynamiske scripting-sprog på JVM-platformen, såsom Groovy, hvor man kan stort set hvad som helst på kørselstidspunktet, er heller ikke lige Nicolas Fränkels kop te.

»Kotlin er statisk, og det er godt.«

»Scala er for folk i hvide kitler«

Der er et andet statisk sprog i JVM-verdenen, som oven i købet kommer fra Schweiz, hvor Nicolas Fränkel bor og arbejder, og det er Scala.

Han prøvede at lære sproget for en del år tilbage, og det var både interessant og ændrede den måde, han programmerede på i Java.

»Scala er et godt skridt fremad, men det handler meget om algoritmer, og jeg er forretningsprogrammør. Jeg skriver ikke algoritmer eller laver matematiske ting – jeg kalder en masse forretningskode. Jeg har en fornemmelse af, at Scala-miljøet handler om meget kloge folk i hvide kitler, og deres verden er ikke min verden.«

Det er måske derfor, at Scala ikke rigtigt har slået an, mener Nicolas Fränkel. Det er et sprog, hvor man kan en masse - makroer, overloadede operatorer - men måske er det bare for meget af det gode.

»Jeg er en gennemsnitlig udvikler, der arbejder sammen med andre gennemsnitlige udviklere. Jeg ønsker mig bare noget, som får tingene gjort uden for meget ballade - og endnu vigtigere: med så få fejl som muligt.«

Kotlin er et pragmatisk sprog, og det er det, der tiltaler Nicolas Fränkel.

»Vi har et forretningsproblem - hvordan løser vi det på en måde, der er let at vedligeholde og læse. For mig er Kotlin det perfekte svar.«

Javas bagudkompatibilitet er for ekstrem

Java understøtter bagudkompatibilitet i meget høj grad. Sproget smider ikke meget ud, og det er et problem, mener Nicolas Fränkel.

»Så du har stadig gamle ting. Selv de dele, der er deprecated (dvs. uegnet til fremtidig brug, red.) Fordelen med Kotlin er, at det er ret nyt, og derfor kan det udvides med nye ting.«

»Jeg tror, der findes en vej mellem Scala, der bryder kompatibilitet mellem mindre versionsopdateringer, og Java, der aldrig bryder kompatibilitet. For mig er det to ekstremer, og jeg bryder mig ikke om nogen af delene.«

Emnet for Nicolas Fränkels foredrag på JDK IO-konferencen er Kotlin som base for DSL-sprog, små sprog, der løser helt specifikke problemer. JVM-sproget Groovy har markedsført sig som det ideelle valg til DSL’er, men det er ikke lige hans kop te:

»For mig er det sådan, at scripting-sprog er til scripts, og statiske sprog er til applikationer. I Groovy kan man gøre en masse ting på kørselstidspunktet, og det tager noget af ydelsen bort. Hvorfor skulle jeg gøre det, hvis jeg kan undgå det?«

Nicolas Fränkel startede med at bruge Kotlin til Android-udvikling, og senere også til backend, med Spring Boot, en slags Ruby On Rails for Java-verdenen.

Nu er Kotlin også officielt understøttet i Spring Boot, og det er en tendens, mener han:

»Alle de teknologi-stakke, jeg bruger og kan lide, har Kotlin nu. Så det er supergodt.«

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (2)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#2 Sune Marcher

Der er masser af gode grunde til at man ikke kan pille ved String klassen i java.

Immutability og final har ikke ret meget med hinanden at gøre - StringBuilder er fx pænt mutable selvom den er final. Og det er ikke umuligt at lave immutable ikke-final klasser, omend man naturligvis skal tænke sig lidt om :-)

Og hverken Kotlin eller C# extension functions ændrer på dette, det er ren syntaktisk sukker. Om man kan lide det er en smagssag; jeg synes helt klart det kan anvendes for meget. På den anden side kan det være ret fint at slippe for "StringUtils.whateverUtilityMethod(myString)" og anvende "myString.whateverUtilityMethod()".

  • 1
  • 1
Log ind eller Opret konto for at kommentere