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[1]. 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.[1]
Ajalugu
Keel on nime saanud Soome lahes asuva Kotlini saare järgi (saar kuulub Venemaale)[2].
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[2].
Kotlini arendust alustati aastal 2010.[1] Esimene ametlik versioon (1.0) ilmus veebruaris 2016.[3] Alates oktoobrist 2017 on võimalik seda ametlikult kasutada Adroid operatsioonisüsteemi rakenduste arendamiseks.[4]
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.[5] 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.[6]
Semikoolon ei ole kohustuslik avaldise lõpetamiseks, seega seda tuleks võimalusel vältida.[1]
Tüübid deklareeritakse peale muutaja nime deklareerimist, eraldades neid kooloniga.[1]
vala:String="a"
Kotlinis saavad muutuja deklaratsioonid olla muteeritavad, kasutades võtmesõnavar
varmutable="a"
või mittemuteeritavad, kasutades võtmesõna val.
valimmutable="a"
Viimane on ekvivalente võtmesõnaga finalJava keeles.
Viimast tuleks eelistada kohtades, kus muutujat omistatakse ainult üks kord[1].
Klassi liikmed on vaikimisi avalikud. Klassidest ei saa vaikimisi pärida (sarnane juhtumiga, kui klass on deklareeritud võtmesõnaga finalJava keeles).
Selleks, et klassist saaks alamklasse pärineda, tuleks vanema klassi deklareerimisel lisada võtmesõna open[1]. Näiteks:
openclassFoo
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[1]. Java keel sellist võimalust vaikimisi ei paku ning selleks tuleb kasutada staatilisi väljasid.