Kotlin (programmeerimiskeel)

**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üübituletamist, 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.


```kotlin
val a: String = "a"
```


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

```kotlin
var mutable = "a"
```


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


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

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


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


Kotlini lambda funktsioonide kasutus:

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