Kotlin (ohjelmointikieli)

Kotlin on yleiskäyttöinen avoimen lähdekoodin staattisesti tyypitetty ohjelmointikieli. Kieli kääntyy JVM-tavukoodiksi. Kotlinilla kirjoitettuja ohjelmia voi siis ajaa kaikissa Java-spesifikaation mukaisia virtuaalikoneita tukevissa ympäristöissä.
Kotlin julkaistiin kesäkuussa 2011, kun siitä tiedotti JetBrains-ohjelmistoyhtiö, työstettyään kielen toteutuksia vuoden ajan. Vuonna 2012 JetBrains julkaisi kielen avoimen lähdekoodin lisenssillä.

Vuonna 2017 Google ilmoitti tukevansa Kotlin-kieltä Android-kehitysympäristössään ja toukokuussa 2019 Google ilmoitti, että Kotlin on Android-sovelluskehityksen suositeltu kieli.

Ominaisuudet 

Kieli on vahvasti tyypitetty: val ja var avainsanoja voidaan käyttää vain kun tyyppi voidaan päätellä, muutoin tyyppi on määriteltävä. Kielessä funktiot voidaan määritellä myös luokan ulkopuolisiksi toisin kuin Javassa.

Kieli tukee muun muassa anonyymejä lambda-funktioita, korkean tason funktioita (voivat saada funktion parametrina) ja inline-funktioita.

Kotlin tulee funktionaalisen ohjelmoinnin lisäksi Javan tapaista olio-ohjelmointia: kieli tukee luokkia konstruktoreilla ja rajapintaluokkia (). Kotlinissa ei ole new-avainsanaa vaan instanssit luodaan kutsumalla konstruktoria. 
Esimerkiksi Javan tapa:
StringBuilder sb = new StringBuilder();
.. on Kotlinissa:
val sb = StringBuilder()

Kotlin yksinkertaistaa ja poistaa null-tuen standardityypeistä.

Kotlin tukee C#:in tapaan laajennusmetodeja, jolloin luokkaa voidaan laajentaa uudella toiminnallisuudella perimättä siitä.
Kotlin tukee Javan tapaan geneerisen ohjelmoinnin ominaisuuksia (luokat, rajapinnat), jossa on kuitenkin myös eroja.

Kotlinissa ei ole tukea Javan checked exceptions -poikkeuksille, joista oli hyötyä lähinnä leluohjelmissa.

Koodiesimerkki 
Yksinkertainen esimerkki Hei maailma -ohjelmalla:
package org.kotlinlang.play         // 1

fun main() {                        // 2
    println("Hello, World!")        // 3
}
.. jossa rivillä 1 on valinnainen pakettimäärittely. Versiosta 1.3 lähtien main-funktion voi määritellä ilman parametreja (rivi 2). Rivillä 3 kirjoitetaan standarditulosteeseen. Puolipisteet lauseen lopussa ovat valinnaisia.

Muita esimerkkejä:
// Hei maailma -esimerkki
fun main() {
  val scope = "maailma"
  println("Hei $scope!")
}

fun main(args: Array<String>) {
  for (arg in args) {
    println(arg)
  }
}

Suosio 
Nykyään yli 60% ammattilaisista Android-kehittäjistä käyttävät Kotlinia. Syitä Kotlinin suosioon on muun muassa parempi tuottavuus, sovelluksen laatu ja tyytyväisemmät työntekijät. Yli 95 % 1000 suosituimmasta Android-sovelluksista sisältävät Kotlin-koodia. Kotlin säästää aikaa koodia kirjoittaessa vähentäen turhaa boilerplate-koodin määrää. Kotlinissa on myös hyödyliisiä vurottaisrutiineja samanaikaisten tietokantakutsujen tekemiseen, toisin kuin Javassa. Kotlinissa on myös lukuisia muita ominaisuuksia, jotka kasvattavat sen suosiota Javaan verrattuna, kuten null-osoittimien turvallisuus, laaja yhteisö ja sovellusalustojen yhteensopivuus.

Kotlin on myös suosittu palvelinpuolesessa kehityksessä. Spring-ohjelmistokehys lisäsi tuen Kotlin-ohjelmointikielelle Tammikuussa 2017. Se on myös lisännyt paljon dokumentaatiota Kotlinin käyttöön ja tuen Kotlin-kohtaisille ominaisuuksille, kuten vuorottaisrutiineille. JetBrains on myös itse tuottanut Ktor-ohjelmistokehyksen verkkosovelluksien rakentamiseen. Kotlinia voi käyttää myös front-end - kehityksessä hyödyntäen Kotlin/JS-sovelluskehystä. Full-stack - kehittäjä voi pärjätä siis pelkästään Kotlinilla.

Vuonna 2020 JetBrains piti kyselyn Kotlin-kehittäjille, josta kävi ilmi 56 prosentin kehittäjistä käyttävän Kotlinia mobiilisovelluksiin, ja 47 prosentin käyttävän sitä back-end:iin. Noin kolmas sanoin olevansa siirtymässä Kotlinin pariin toisesta kielestä. Suurin osa kehittäjistä kehittivät nimenomaan Androidille tai muuten Java Virtual Machine:lle, jättäen vain 7 % natiiviin käyttöön.

Lähteet

Aiheesta muualla 
 Virallinen sivusto
 Grammar – kielioppi ANTLR 4 -muodossa 
 Android Kotlin Fundamentals: Welcome to the course 

Ohjelmointikielet