Kotlin (programmalastırıw tili)

**Kotlin**  – kross-platformalı, statikalıq túrde terilgen, ulıwma maqsetli joqarı dárejeli programmalastırıw tili. Kotlin Java menen tolıq jumıs islewge arnalǵan hám Kotlinniń standart kitapxanasınıń JVM versiyası Java klass kitapxanasına baylanıslı, biraq hátte juwmaqlaw onıń sintaksisin anaǵurlım qısqa qılıwǵa imkaniyat beredi. Kotlin tiykarınan JVM-ge baǵdarlanǵan, biraq sonıń menen birge JavaScript-ke kompilyaciya isleydi (mısalı, React járdemi menen veb-qosımshalar ushın) yamasa LLVM arqalı jergilikli kod (mısalı, Android qosımshaları menen biznes logikasın ulıwma paydalanatuǵın jergilikli iOS qosımshaları ushın). Tildi rawajlandırıw shıǵınların JetBrains qaplaydı, al Kotlin Foundation Kotlin sawda belgisin qorǵaydı.

2019-jıl 7-mayda Google Kotlin programmalastırıw tili Android qosımshasın jaratıwshılar ushın eń qolaylı til ekenin járiyaladı. 2017-jıl oktyabr ayında Android Studio 3.0 versiyası shıqqannan berli Kotlin standart Java kompilyatorına alternativ retinde qosıldı. Android Kotlin kompilyatorı ádepki boyınsha Java 8 bayt kodın shıǵaradı (ol hár qanday keyingi JVM sistemasında jumıs isleydi), biraq baǵdarlamashıǵa optimallastırıw ushın Java 9-dan 20-ǵa deyingi maqsetli tańlawǵa imkaniyat beredi, yamasa qosımsha imkaniyatlarǵa ruqsat beredi; Java 16 sistemasına engizilgen Kotlin 1.5 versiyası bolsa, turaqlı bolıp esaplanatuǵın JVM ushın eki baǵdarlı jazba klasınıń óz-ara háreketlesiwin qollaydı.

Kotlin 1.3 versiyasınan baslap turaqlı dep járiyalaǵan klassikalıq awdarmashı tiykarında server yamasa 1.8 versiyasınan baslap turaqlı dep járiyalanǵan aralıq wákillikke tiykarlanǵan server arqalı Kotlin/JS járdemi menen vebti qollaydı. Kotlin/Native (mısalı, Apple kremniy qollawı ushın) 1.3 versiyasınan baslap beta bolıp esaplanadı.

## Tariyxı

### Atı
Bul at Sankt-Peterburg qasındaǵı Finlyandiya shıǵanaǵındaǵı orıs atawı bolǵan Kotlin atawınan alınǵan. Kotlinniń burınǵı jetekshi dizayneri Andrey Breslavtıń komandası onı atawdıń atın beriwdi sheshkenin ayttı, Java programmalastırıw tili Indoneziyanıń Yava atawınıń húrmetine qoyılǵanı sıyaqlı (biraq tildiń ataması kofege arnalǵan amerikalı jargon termini «java» arqalı ilhamlandırılǵan delinedi, ol ataw atamasınan kelip shıqqan).

### Rawajlandırıw
2011-jıl iyulda JetBrains bir jıl dawamında islep shıǵarıp atırǵan JVM ushın jańa Project Kotlin tilin ashtı. JetBrains jetekshisi Dmitriy Djemerov Scala tilinen basqa tillerdiń kópshiliginde olar izlegen imkaniyatlar joq ekenin ayttı. Degen menen, ol kemshilik retinde Scala-nıń kompilyaciyalaw waqtı ásten ekenin atap ótti Kotlinniń aldaǵı maqsetleriniń biri - Java sıyaqlı tez kompilyaciya qılıw bolıp tabıladı. 2012-jıl fevralda JetBrains proektti Apache 2 licenziyası boyınsha ashtı..

JetBrains jańa til IntelliJ IDEA satıwın kóteredi dep úmitlendi.

Kotlin Git repozitoriyine birinshi minnetleme 2010-jıl 8-noyabrde boldı.

Kotlin 1.0 2016-jıl 15-fevralda shıǵarıldı. Bul birinshi rásmiy turaqlı shıǵarılım bolıp esaplanadı hám JetBrains usı versiyadan baslap uzaq múddetti keri úylesimlikke minnetledi.

Google I/O 2017 kórgizbesinde Android sistemasında Kotlinge birinshi dárejeli qollaw bildiretuǵının járiyaladı.

Kotlin 1.2 2017-jıl 28-noyabrde shıǵarıldı. JVM hám JavaScript platformaları arasında kodtı bólisiw imkaniyatı usı shıǵarılımǵa jańadan qosıldı (kóp platformalı programmalastırıw házir beta imkaniyatı bolıp tabıladı «eksperimentlik» versiyasınan jańalandı). Jańa Kotlin/JS Gradle Plugin járdemi menen tolıq demonstraciya islendi.

Kotlin 1.3 2018-jıl 29-oktyabrde shıǵarıldı, ol asinxronlı programmalastırıw ushın korutinlerdi ákeldi.

2019-jıl 7-mayda Google Kotlin programmalastırıw tilin Android qosımshasın jaratıwshılar ushın tańlanǵan til ekenin járiyaladı.

Kotlin 1.4 2020-jıl avgustte shıǵarıldı, mısalı: Apple platformaların qollawǵa, yaǵnıy Objective-C/Swift interfeysine ayırım shamalı ózgerislerdi qostı.

Kotlin 1.5 2021-jıl mayda shıǵarıldı.

Kotlin 1.6 2021-jıl noyabrde shıǵarıldı.

Kotlin 1.7 jańa Kotlin K2 kompilyatorınıń alfa versiyasın qosqanda, 2022-jıl iyunda shıǵarıldı.

Kotlin 1.8 versiyası 2021-jıl dekabrde, 1.8.0 versiyası 2023-jıl 11-yanvarda shıǵarıldı.

Kotlin 1.9 2023-jıl iyulda shıǵarıldı, 1.9.0 2023-jıl 6-iyulda shıǵarıldı.

## Proektlestiriw
Baǵdarlamalastırıw boyınsha jetekshi Andrey Breslav Kotlin sanaatqa arnalǵan kúshli obyektke baǵdarlanǵan til hám Java-ǵa qaraǵanda «jaqsı til» bolıw ushın jaratılǵanın, biraq ele de Java kodı menen tolıq islesiwin, bul kompaniyalarǵa Java-dan Kotlinge basqıshpa-basqısh kóshiwge imkaniyat beretuǵının ayttı.

Operaciya terminatorı retinde noqatlı útir minnetli emes; kóp jaǵdayda kompilyator járiyalanıwdıń tamamlanǵanın shıǵarıw ushın jańa qatar jetkilikli.

Kotlin ózgeriwshilerdi járiyalaw menen parametrler dizimlerinde maǵlıwmatlar tipi Ada, BASIC, Pascal, TypeScript hám Rust sıyaqlı ózgeriwshi atınan keyin keledi (hám qos noqat penen). Bul jobanıń házirgi jetekshisi Roman Elizarov maqalasına sáykes, ózgeriwshi atların sáykeslestiriwge alıp keledi hám kózdi quwantadı, ásirese bir neshe ózgeriwshilerdi járiyalaw qatarınan bolsa hám bir yamasa bir neshe tipi ushın quramalı bolsa. Juwmaq yamasa adam oqıǵanda túsiniwi ushın anıq járiyalaw zárúr.

Kotlindegi ózgeriwshiler tek oqıwǵa arnalǵan, gilt sózi menen járiyalanıwı yamasa ózgeriwsheń gilt sózi menen járiyalanıwı múmkin.

Klass aǵzaları ádepki boyınsha hámmege ulıwma, al klaslardıń ózleri ádepki boyınsha túpkilikli bolıp tabıladı, yaǵnıy tiykarǵı klass gilt sózi menen járiyalanbasa, tuwındı klastı jaratıw óshiriledi.

Obyektke baǵdarlanǵan programmalastırıwdıń klasları menen klass aǵza funkciyalarına (metodlarǵa ekvivalent) qosımsha, Kotlin sonıń menen qatar funkciyalardı qollanıw arqalı proceduralıq programmalastırıwdı qollaydı.
Kotlin funkciyaları menen konstruktorları ádepki argumentlerdi, ózgeriwshi uzınlıqtaǵı argument dizimlerin, atalǵan argumentlerdi hám unikal qoltańba arqalı shamadan tıs júklewdi qollaydı. Klass aǵzalarınıń funkciyaları virtual, yaǵnıy olar shaqırılatuǵın obyekttiń orınlanıw waqtınıń tipine qarap jiberiledi.

Kotlin 1.3 shártnamaǵa qollawdı qostı, standart kitapxana járiyalanıwları ushın turaqlı, biraq paydalanıwshı anıqlaytuǵın járiyalanıwlar ushın ele de eksperimentli. Shártnamalar Eyfeldiń shártnamalı programmalastırıw paradigması boyınsha dizaynnan ilhamlandırıladı.

Kotlin kodı eki tilde jazılǵan kodtıń óz-ara islesiwine imkaniyat beretuǵın JavaScript-ke kompilyaciyalanıwı múmkin. Bul Kotlin-de tolıq veb-qosımshalardı jazıw ushın yamasa Kotlin serveri menen JavaScript interfeysi arasında kodtı bólisiw ushın paydalanılıwı múmkin.

## [[Sintaksis (programmalastırıw tilleri)|Sintaksis]]

### Proceduralıq programmalastırıw stili
Kotlin Javanıń statikalıq metodları menen ózgeriwshi mánisleriniń tek klass denesinde bolıwın sheklewdi jeńilletedi. Statikalıq obyektler menen funkciyalardı artıqsha klass dárejesin talap etpey pakettiń joqarı dárejesinde anıqlawǵa boladı. Java menen úylesimlilik ushın Kotlin paket Java proektinen qaralǵanda paydalanatuǵın klass atın kórsetetuǵın JvmName annotaciyasın beredi. Mısalı, “@file:JvmName("JavaClassName").

### Tiykarǵı kiriw noqatı
C, C++, C#, Java hám Go tillerindegi sıyaqlı, Kotlin baǵdarlamasına kiriw noqatı hár qanday komanda qatarı argumentleri bar massiv arqalı beriliwi múmkin «main» dep atalatuǵın funkciya bolıp tabıladı. Bul Kotlin 1.3 versiyasınan baslap minnetli emes. Perl, PHP hám Unix qabıq stilindegi qatar interpolyaciyasına qollaw kórsetiledi. Tip tuwralı juwmaqqa da qollaw bar.
```kotlin
// Sálem, Álem! mısal
fun main() {
 val scope = "Álem"
 println("Hello, $scope!")
}

fun main(args: Array<String>) {
 for (arg in args)
 println(arg)
}
```


### Keńeytpe funkciyaları
C# sıyaqlı, Kotlin jańa funkciyaları bar tuwındı klastı dúziwdiń formal emesligin hár qanday klasqa keńeytpe funkciyasın qosıwǵa imkaniyat beredi. Keńeytpe funkciyası klastıń barlıq hámmege ulıwma interfeysine erise aladı, ol onı maqsetli klasqa jańa funkciya interfeysin jaratıw ushın paydalana aladı. Keńeytpe funkciyası dál klass funkciyası sıyaqlı payda boladı hám klass funkciyaların kodtı tamamlawdı tekseriwde kórsetiledi. Mısalı:
```kotlin
package MyStringExtensions

fun String.lastChar(): Char = get(length - 1)

>>> println("Kotlin".lastChar())
```
Aldıńǵı kodtı pakettiń joqarı dárejesine jaylastırıw arqalı String klası String klasınıń dáslepki anıqlamasına qosılmaǵan lastChar funkciyasın qamtıw ushın keńeytiledi.
```kotlin
// Keńeytpe funkciyası arqalı «+» operatorın shamadan tıs júklew
operator fun Point.plus(other: Point): Point {
 return Point(x + other.x, y + other.y)
}

>>> val p1 = Point(10, 20)
>>> val p2 = Point(30, 40)
>>> println(p1 + p2)
Point(x=40, y=60)
```


### Argumentlerdi tarqatıw operatorı menen ashıń
Python sıyaqlı, tarqatıw operatorı juldızsha (*) funkciyasınıń jeke argumentleri retinde massiv mazmunın ashadı, mısalı:
```kotlin
fun main(args: Array<String>) { 
 val list = listOf("args: ", *args)
 println(list)
}
```


### «Sálem álem» (Hello world) mısalı
(https://kotlinlang.org/docs/kotlin-tour-hello-world.html-dan alındı hám túsindirildi.)
```kotlin
fun main() {
 println("Sálem, álem!")
 // Sálem, álem!
}
```


## Qurallar

* Android Studio (IntelliJ IDEA tiykarında) Android Studio 3-ten baslap Kotlinge rásmiy qollaw bar.
* Ulıwma Java jaratıw quralları menen integraciyaǵa qollaw kórsetiledi, sonıń ishinde Apache Maven, Apache Ant, hám Gradle.
* Emacs óziniń MELPA paket repozitariyinde Kotlin rejimine iye.
* JetBrains sonıń menen qatar Eclipse ushın plagindi usınadı.
* IntelliJ IDEA-da Kotlin ushın plagindi qollaw bar. IntelliJ IDEA 15 IntelliJ ornatıwshısında Kotlin plaginin biriktiretuǵın hám Kotlin qollawın qutıdan tıs támiyinleytuǵın birinshi versiyası boldı.
* Gradle: Kotlinniń Gradle menen úziliksiz integraciyası bar, ol islep shıǵıwdı avtomatlastırıwdıń ataqlı quralı bolıp tabıladı. Gradle sizge Kotlin proektleriniń ómirlik ciklın ónimli dúziwge, avtomatlastırıwǵa hám basqarıwǵa imkaniyat beredi.

## Derekler

* Bul maqalada Apache 2.0 licenziyası boyınsha shıǵarılǵan Kotlin sabaqlıqlarınan citatalar bar.