# Kotlin (programazio-lengoaia)

Kotlin programazio-lengoaia bat da, multiplataforma, objektuetara bideratua, goi-mailakoa, helburu orokorrekoa, datu-moten egiaztapena konpilazio garaian modu estatikoan egiten duena eta adierazpenen motaren inferentzia modu automatikoan egiten duena. Javarekin elkarrekintzan aritu ahal izateko diseinatuta dago. Kotlin-en liburutegi estandarraren Java Makina Birtual bertsioa (ingelesez, Java Virtual Machine, JVM) Java Class Library-ren mende dago, baina datu moten inferentziari esker sintaxia laburragoa izan daiteke. Kotlin batez ere JVMrako diseinatuta dago, baina JavaScript ere konpilatzen du (adibidez, React erabiltzen duten front-end web aplikazioetarako) eta baita makina-lengoaia ere behe mailako makina birtualen (ingelesez Low Level Virtual Machine, LLVM) bidez (Android aplikazioekin negozio-logika partekatzen duten iOS aplikazio natiboetan, adibidez). Lengoaiaren garapen-kostuak JetBrains enpresak ordaintzen ditu eta Kotlin marka komertziala Kotlin fundazioak babesten du.
2019ko maiatzaren 7an, Android aplikazioen garatzaileek gehien atsegin zuten programazio-lengoaia Kotlin zela iragarri zuen Googlek. 2017ko urrian Android Studio 3.0 plazaratu zenetik, Kotlin eskaintzen da Java konpiladore estandarraren alternatiba gisa. Besterik adierazi ezean, Android-en Kotlin konpiladoreak Java 8 bytecode kodea sortzen du, ondorengo edozein JVM-tan exekuta daitekeena, baina programatzaileari Java 9 eta Java 18 arteko bytecode kodea sortzeko aukera ematen dio, optimizatzeko. Java 16an gehitu zen JVM-rako erregistro-klaseen bi noranzkoetako elkarreragingarritasunerako euskarria. Kotlin 1.5etik aurrera elkarreragingarritasun hori egonkor bihurtu dela ontzat ematen da.
Kotlin-ek badu weberako euskarria. JavaScript konpilatzen du, 1.3 bertsiotik aurrera, back-end klasikoa duen Kotlin/JS egonkorra da. Berriena den Kotlin/JS tarteko mailako lengoaia batean oinarrituta dago eta 1.5.30 bertsiotik aurrera beta egoeran dago. Apple txipekin bateragarri den Kotlin/Native beta bertsioan dago 1.3 bertsiotik aurrera.

## Historia

2011ko uztailean JetBrains-ek Kotlin Proiektua ezagutzera eman zuen. Garapen-fasean urtebetez egon ondoren, JVMrako sortutako lengoaia berri bat zen. JetBrains taldeko buru zen Dmitry Jemerov-ek esan zuen programazio-lengoaia gehienetan ez zituztela aurkitzen bilatzen zituzten ezaugarriak, Scala lengoaian izan ezik. Scala lengoaiaren konpilazio-denbora motela akats nabaria zela esan zuen. Kotlin lengoaia garatzean, helburuetako bat Java bezain azkar konpilatzea zen.
2012ko otsailean, JetBrains-ek proiektuaren iturburu-kodea askatu zuen Apache 2 lizentziapean.
2017an bultzada handia jaso zuen, Google-ek Androiderako lengoaia ofizial izendatu baitzuen Kotlin, Javaren maila berean.

## Filosofia

Lengoaiaren garapena gidatu duen Andrey Breslav-ek esan du Kotlin kalitate industriala duen eta objektuetara bideratuta dagoen programazio-lengoaia izateko diseinatu dutela. Horrez gain, Java baino hobea izateko diseinatu dutela esan du, eta Java kodearekin elkarreragiteko gaitasuna duela, Javatik Kotlinera pasa nahi duten enpresei migrazioa pixkanaka egiteko aukera emanez.

## Sintaxia

Pascal, Haxe, PL/SQL, F#, Rust, Go eta Scala programazio-lengoaiek bezala (eta C eta bere aldaera diren C++, Java, C# eta D lengoaiek ez bezala), Kotlin-en aldagaiak eta parametroak erazagutzean, datu-mota identifikatzailearen ondoren jartzen da, eta haien artean bi puntuko bereizlea jartzen da. Beste programazio-lengoaia modernoetan bezala (Scala eta Groovy, adibidez), sententziaren amaieran puntu eta koma jartzea ez da derrigorrezkoa, hautazkoa baizik; askotan, lerro-jauzi bat nahikoa da konpiladorea konturatzeko deklarazioa amaitu dela.

## Semantika

Objektuetara bideratutako programazioan ohikoak diren klaseez eta metodoez gain (Kotlin-en funtzio kide deituak), Kotlin-ek programazio funtzionala (prozeduren bidezkoa) ere onartzen du. C eta C++ lengoaietan bezala, Kotlin lengoaian idatzitako programak "main" izeneko funtzio batekin hasten dira. Funtzio horrek array bat jasotzen du, bertan gordetzen dira komando lerrotik pasatako argumentuak. Perl eta Unix/Linux-en shell programetan bezala, karaktere-kateen barruan aldagaiak interpolatzea onartzen du. Kotlinen beste ezaugarri bat da datu moten inferentzia egiten duela.

### Adibidea

Kotlinek bereizi egiten ditu datu-mota deuseztagarriak (balio nulua izan dezaketenak edo baliorik ez dutenak) eta ez-deuseztagarriak. Deuseztagarriak diren objektuak erazagutzeko (deklaratzeko), motaren izenaren ondoren "?" ikurra jarri behar da atzizki gisa. Objektu deuseztagarriekin egindako eragiketek garatzaileen arreta berezia eskatzen dute, hau da, erabili aurretik balioa nulua dela egiaztatu behar da. Garatzaileei laguntzeko, Kotlin-ek balio nuluak egiaztatzeko seguruak diren eragileak eskaintzen ditu:
* ?. Nabigazio seguruko eragilea. Nulua izan daitekeen objektu baten metodo edo propietate bat modu seguruan atzitzeko erabil daiteke. Objektua nulua bada, metodoari ez zaio deituko eta adierazpena ebaluatzearen emaitza null izango da.
* ?: Koaleszentzia nuluko eragilea edo Elvis eragilea:
Nabigazio seguruko eragilearen erabileraren adibide bat:

## Tresnak

* IntelliJ IDEA garapenerako inguruneak Kotlin-erako plugin bat dauka. IntelliJ IDEA 15 da Kotlin plugina IntelliJ instalatzailean txertatua duen lehen bertsioa eta hasieratik euskarria ematen duena.
* JetBrains-ek Eclipserako plugin-a ere badu.
* Apache Maven plugina.
* Apache Ant-erako ataza.
* Gradle plugina .
* Android Studio-k 3.0 bertsiotik onartzen du Kotlin.
* NetBeans-ek ere badu Kotlinerako plugina.

## Erreferentziak

* ↑ «kotlin-stdlib - Kotlin Programming Language» Kotlin.
* ↑ «Kotlin for JavaScript | Kotlin» Kotlin Help.
* ↑ «Kotlin Multiplatform for Cross-Platform Mobile Development» Kotlin Multiplatform Mobile.
* ↑ «Kotlin Foundation» Kotlin Foundation.
* ↑ Lardinois, Frederic. (2019-05-07). «Kotlin is now Google's preferred language for Android app development» TechCrunch.
* ↑ «FAQ | Kotlin» Kotlin Help.
* ↑ «Stability of Kotlin components | Kotlin» Kotlin Help.
* ↑ «Kotlin 1.5.0 – the First Big Release of 2021 | The Kotlin Blog» The JetBrains Blog.
* 1 2 Krill, Paul. (Jul 22, 2011). «JetBrains readies JVM language Kotlin» infoworld.com (InfoWorld).
* ↑ RebelLabs. (22 de abril de 2013). «JVM Languages Report extended interview with Kotlin creator Andrey Breslav» http://zeroturnaround.com/.
* ↑ «Semicolons» jetbrains.com.
* ↑ «functions» jetbrains.com.
* ↑ Jetbrains Plugin Repository:Kotlin. .
* ↑ Kotlin for Eclipse. .
* 1 2 3 Kotlin Build Tools. .

## Ikus, gainera

* Java
* JavaScript

## Kanpo estekak

* Kotlin webgune ofiziala