**Kotlin** on avaliku lähtekoodiga staatiliselt tüübitud programmeerimiskeel, mis kompileerub Java baitkoodiks ja kasutab Java virtuaalmasinat (JVM). Muud sihtplatvormid on JavaScript, Android ja riistvara lähedane programmeerimine. Keelt arendab ettevõte JetBrains, arendusmeeskond asub Peterburi linnas Venemaal.

Kuigi Kotlin ja Java ei ole süntaksi poole pealt ühilduvad, on Kotlin Java keelega funktsionaalsuse osas täielikult ühilduv ja sisemiselt kasutab Java teekide implementatsioone. Üks näide sellest oleks näiteks Java Collections raamistik. Kotlin kasutab automaatset tüübituvastust, kus see on kompilaatori jaoks võimalik. See võimaldab koodiridade hulka vähendada umbes 40% võrra võrreldes samaväärse Java koodiga.

Ajalugu
-------

Keel on nime saanud Soome lahes asuva Kotlini saare järgi (saar kuulub Venemaale). 

Kotlini erinevus Scala keelest seisneb selles, et kui Scala eesmärk on anda võimalikult palju vabadust teekide loojatele, siis Kotlini eesmärk on olla hea tööriist lõppkasutaja jaoks.

Kotlini arendust alustati aastal 2010. Esimene ametlik versioon (1.0) ilmus veebruaris 2016. Alates oktoobrist 2017 on võimalik seda ametlikult kasutada Adroid operatsioonisüsteemi rakenduste arendamiseks.

28. novembril 2017 ilmus versioon 1.2. Selle versiooni suurim iseärasus oli see, et alates sellest versioonist on võimalik koodi taaskasutada JVM ja JavaScripti platvormide vahel. Selline lähenemine annab arendajatele võimaluse jagada äriloogikat erinevate moodulite vahel, mis tähendab, et nad ei pea enam iga uue komponendi jaoks äriloogikat ümber kirjutama.

Põhimõtted
----------

Projektijuht Andrey Breslav rääkis, et keele põhimõte on olla parem keel kui Java, kuid samas peab Kotlin säilitama täielikku ühendatavust Java keelega selleks, et suured ettevõtted saaksid alustada osalist migreerimist uuele keelele. See lubab osaliselt üle kirjutada vana koodi, mitte kõike korraga.

Semikoolon ei ole kohustuslik avaldise lõpetamiseks, seega seda tuleks võimalusel vältida.

Tüübid deklareeritakse peale muutaja nime deklareerimist, eraldades neid kooloniga.

```
val a: String = "a"

```

Kotlinis saavad muutuja deklaratsioonid olla muteeritavad, kasutades võtmesõna *var*

```
var mutable = "a"

```

või mittemuteeritavad, kasutades võtmesõna *val.*

```
val immutable = "a"

```

Viimane on ekvivalente võtmesõnaga *final*
Java keeles.
Viimast tuleks eelistada kohtades, kus muutujat omistatakse ainult üks kord.

Klassi liikmed on vaikimisi avalikud. Klassidest ei saa vaikimisi pärida (sarnane juhtumiga, kui klass on deklareeritud võtmesõnaga *final* Java keeles).
Selleks, et klassist saaks alamklasse pärineda, tuleks vanema klassi deklareerimisel lisada võtmesõna *open*. Näiteks:

```
open class Foo

```

Kotlini keeles on olemas ka vaikimisi konstruktsioon üksikute objektide deklareerimiseks.
Selleks on olemas võtmesõna *object*, mida tuleks kasutada võtmesõna *class* asemel klassi deklareerimisel. Java keel sellist võimalust vaikimisi ei paku ning selleks tuleb kasutada staatilisi väljasid.

Koodi näide
-----------

Tere maailm programm Kotlinis:

```
fun main(args: Array<String>) {
 println("Tere maailm!")
}

```

Kotlini lambda funktsioonide kasutus:

```
fun main(args: Array<String>) {
 // Parameetriteta lambda
 val noParamLambda = { println("Tere, maailm!") }
 noParamLambda() // väljastab ekraanile "Tere, maailm!"

 // Lambda, mis võtab parameetrina sõne
 val paramLambda = { name: String -> println("Tere, $name") }
 paramLambda("maailm!") // väljastab ekraanile "Tere, maailm!"
}

```

Viited
------

1. 1 2 3 4 5 6 7 8 9  "Kotlin Language Documentation" (PDF). Vaadatud 16.03.2018.
2. 1 2 3  
Heiss, Janice (aprill 2013). "The Advent of Kotlin: A Conversation with JetBrains' Andrey Breslav". Oracle Technology Network. Vaadatud 16.03.2018.
3. ↑  Breslav, Andrey (15. veebruar 2016). "Kotlin 1.0 Released: Pragmatic Language for JVM and Android". Vaadatud 16.03.2018.
4. ↑  Shafirov, Maxim (17. mai 2017). "Kotlin on Android. Now official". *JetBrains Blog*. Vaadatud 16.03.2018.
5. ↑  "Kotlin 1.2.30 is out". *Kotlin Blog*. 1. märts 2018. Vaadatud 16.03.2018.
6. ↑  "JVM Languages Report extended interview with Kotlin creator Andrey Breslav". *RebelLabs*. 22. aprill 2013. `{{cite web}}`: eiran tundmatut parameetrit `|accessed=` (juhend)