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:

```java
StringBuilder sb = new StringBuilder();
```

.. on Kotlinissa:

```kotlin
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:

```kotlin
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ä:

```kotlin
// 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ää 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ä vuorottaisrutiineja 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 palvelinpuoleisessa 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 kolmannes sanoi olevansa siirtymässä Kotlinin pariin toisesta kielestä. Suurin osa kehittäjistä kehitti nimenomaan Androidille tai muuten Java Virtual Machine:lle, jättäen vain 7 % natiiviin käyttöön.

## Lähteet

## Aiheesta muualla
* Virallinen sivusto
* Grammar &ndash; kielioppi ANTLR 4 -muodossa 
* Android Kotlin Fundamentals: Welcome to the course