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.

## 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 
```kotlin
fun main() {
  val scope = "mundua"
  println("Kaixo, $scope!")
}
```
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:

```kotlin
fun kaixoEsan(agian : String?, inoizezNull : Int) {
   // Elvis eragilearen erabilera
   val izena : String = agian ?: "ezezaguna"
   println("Kaixo, $izena")
}
```
Nabigazio seguruko eragilearen erabileraren adibide bat:
```kotlin
// null itzuliko du baldin...
// - baldin foo() -ren emaitza null bada,
// - edo baldin foo() -ren emaitza null ez bada, baina bar() -ren emaitza null bada,
// - edo baldin foo() eta bar() -ren emaitzak null ez badira, baina baz() -ren emaitza null bada.
// alderantziz, null ez den balioa itzuliko du baldin eta soilik baldin foo(), bar() eta baz() -ren emaitza null  ez bada
foo () ?. bar() ?. baz()
```

## 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 
## Ikus, gainera 
* Java
* JavaScript

## Kanpo estekak 
* Kotlin webgune ofiziala