Programavimas

Kas yra Kotlinas? Paaiškinta „Java“ alternatyva

„Kotlin“ yra bendros paskirties, nemokama, atviro kodo, statiškai įvesta „pragmatiška“ programavimo kalba, kuri iš pradžių buvo sukurta JVM („Java Virtual Machine“) ir „Android“, kuri sujungia į objektą orientuotas ir funkcines programavimo funkcijas. Jis orientuotas į sąveikumą, saugumą, aiškumą ir įrankių palaikymą. Taip pat yra kuriamos „Kotlin“ versijos, nukreipiančios į „JavaScript ES5.1“ ir vietinį kodą (naudojant LLVM) keliems procesoriams.

„Kotlin“ atsirado „JetBrains“ įmonėje, kuriančioje „IntelliJ IDEA“, 2010 m. Ir yra atviro kodo nuo 2012 m. „Kotlin“ komandoje šiuo metu yra daugiau nei 90 etatinių narių iš „JetBrains“, o „Kotlin“ projekte „GitHub“ dalyvauja daugiau nei 300 bendradarbių. „JetBrains“ naudoja „Kotlin“ daugelyje savo produktų, įskaitant pavyzdinį „IntelliJ IDEA“.

„Kotlin“ kaip glaustesnė „Java“ kalba

Iš pirmo žvilgsnio Kotlin atrodo kaip glaustesnė ir racionalesnė „Java“ versija. Apsvarstykite aukščiau pateiktą ekrano kopiją, kurioje aš automatiškai konvertuoju „Java“ kodo pavyzdį (kairėje) į „Kotlin“. Atkreipkite dėmesį, kad nesąmoningas pasikartojimas, būdingas kuriant „Java“ kintamuosius, dingo. Java idioma

„StringBuilder“ sb = naujas „StringBuilder“);

Tampa Kotline

val sb = StringBuilder ()

Galite pamatyti, kad funkcijos yra apibrėžtos linksma raktinis žodis ir kad kabliataškiai dabar yra neprivalomi, kai yra naujų eilučių. val raktinis žodis deklaruoja tik skaitomą ypatybę arba vietinį kintamąjį. Panašiai var raktinis žodis deklaruoja kintamą ypatybę arba vietinį kintamąjį.

Nepaisant to, Kotlinas yra labai tipiškas. val ir var raktinius žodžius galima naudoti tik tada, kai galima spręsti apie tipą. Priešingu atveju reikia deklaruoti tipą. Atrodo, kad tipo išvados gerėja kiekvieną kartą išleidus „Kotlin“.

Pažvelkite į funkcijų deklaraciją šalia abiejų stiklų viršaus. „Java“ grąžinimo tipas yra ankstesnis už prototipą, tačiau Kotline jis yra sėkmingas prototipas, pažymėtas dvitaškiu, kaip ir Pascale.

Iš šio pavyzdžio nėra visiškai akivaizdu, tačiau Kotlinas sušvelnino „Java“ reikalavimą, kad funkcijos būtų klasės nariai. Kotline funkcijos gali būti deklaruojamos aukščiausiu rinkmenos lygiu, lokaliai kitų funkcijų viduje, kaip nario funkcija klasės ar objekto viduje ir kaip išplėtimo funkcija. Pratęsimo funkcijos suteikia C # tipo galimybę išplėsti klasę naujomis funkcijomis, nereikia paveldėti iš klasės ar naudoti bet kokio tipo dizaino modelio, pvz., „Decorator“.

„Groovy“ gerbėjams „Kotlin“ įgyvendina statybininkus; iš tikrųjų „Kotlin“ statybininkams galima patikrinti tipą. „Kotlin“ palaiko perduotas ypatybes, kurios gali būti naudojamos įgyvendinant tingias savybes, pastebimas savybes, vetuojamas ir susietas savybes.

Daugelį asinchroninių mechanizmų, galimų kitomis kalbomis, galima įdiegti kaip bibliotekas naudojant Kotlino korutines medžiagas. Tai įtraukia asinchroninis/laukti iš C # ir ECMAScript, kanalus ir pasirinkite iš Go ir generatoriai/derlius iš C # ir Python.

Funkcinis programavimas Kotline

Aukščiausio lygio funkcijų leidimas yra tik „Kotlin“ funkcinio programavimo istorijos pradžia. Kalba taip pat palaiko aukštesnio lygio funkcijas, anonimines funkcijas, „lambdas“, „inline“ funkcijas, uždarymus, uodegos rekursiją ir bendrinius. Kitaip tariant, Kotlinas turi visas funkcinės kalbos ypatybes ir pranašumus. Pavyzdžiui, apsvarstykite šias funkcines Kotlino idiomas.

Filtruoti sąrašą „Kotlin“

val teigiami = list.filter {x -> x> 0}

Jei norite dar trumpesnės išraiškos, naudokite tai kai lambda funkcijoje yra tik vienas parametras:

val teigiami = list.filter {it> 0}

Keliaudami po Kotlino žemėlapį / porų sąrašą

už ((k, v) žemėlapyje) {println („$ k -> $ v“)}

k irv galima vadinti bet kuo.

Diapazonų naudojimas Kotline

už (i in 1..100) {...} // uždaras diapazonas: apima 100

už (i in Nuo 1 iki 100) {...} // pusiau atviras diapazonas: nėra 100

už (x į 2..10 2 žingsnis) {...}

už (x į 10 iki 1) {...}

jei (x į 1..10) { ... }

Aukščiau pateikti pavyzdžiai rododėl raktinį žodį, taip pat diapazonų naudojimą.

Nors „Kotlin“ yra pilnavertė funkcinė programavimo kalba, ji išsaugo didžiąją dalį „Java“ kaip alternatyvaus programavimo stiliaus į objektą orientuoto pobūdžio, o tai labai patogu konvertuojant esamą „Java“ kodą. „Kotlin“ turi klases su konstruktoriais, taip pat įdėtas, vidines ir anonimines vidines klases, ir turi sąsajas, tokias kaip „Java 8.“. ne turėk naujas raktinis žodis. Norėdami sukurti klasės egzempliorių, iškvieskite konstruktorių kaip ir įprastą funkciją. Tai matėme aukščiau esančiame ekrano kopijoje.

„Kotlin“ turi vieną paveldėjimą iš pavadinto superklasės, o visos „Kotlin“ klasės turi numatytąjį superklasę Bet koks, kuris yra ne tokia pati kaip „Java“ pagrindinė klasė java.lang.Object. Bet koks yra tik trys iš anksto nustatytos narių funkcijos: lygi (), hashCode ()ir toString ().

Kotlino klasės turi būti pažymėtos atviras raktinį žodį, kad kitos klasės galėtų juos paveldėti; „Java“ klasės yra tarsi priešingos, nes yra paveldimos nebent pažymėtas galutinis raktinis žodis. Norint nepaisyti superklasės metodo, pats metodas turi būti pažymėtas atviras, ir poklasio metodas turi būti pažymėtas nepaisyti. Visa tai yra gabalas, turintis Kotlino filosofiją, kad viskas būtų aišku, o ne pasikliauti nutylėjimais. Šiuo konkrečiu atveju aš matau, kur Kotlino būdas aiškiai pažymėti bazinės klasės narius kaip atvirus paveldėjimui ir išvestinius klasės narius kaip nepaisomus, leidžia išvengti kelių tipų „Java“ klaidų.

Saugumo funkcijos Kotlin

Kalbėdamas apie dažnai pasitaikančių klaidų vengimą, „Kotlin“ buvo sukurtas siekiant pašalinti nulinių rodyklių nuorodų pavojų ir supaprastinti nulinių verčių tvarkymą. Tai daro padarydamas a niekinis draudžiama naudoti standartinius tipus, pridedant negaliojančius tipus ir įgyvendinant sparčiuosius klavišus, kad būtų galima atlikti „null“ bandymus.

Pavyzdžiui, įprastas tipo kintamasisStygos negali laikytiniekinis:

var a: eilutė = "abc"

a = null // kompiliavimo klaida

Jei reikia leisti „nulls“, pavyzdžiui, laikyti SQL užklausos rezultatus, galite paskelbti negaliojančiu tipą, prie tipo pridėdami klaustuką, pvz. Stygos?.

var b: Stygos?

b = nulis // Gerai

Apsaugos eina šiek tiek toliau. Nenuliuojamąjį tipą galite naudoti nebaudžiamai, tačiau prieš jį naudodami turite išbandyti niekinio tipo nulines reikšmes.

Kad būtų išvengta daugialypės gramatikos, paprastai reikalingos atliekant nulinį testavimą, Kotlinas įveda a saugus skambutis, parašyta ?.. Pavyzdžiui, b? .ilgis grįžta b. ilgis jei b nėra niekinisir niekinis kitaip. Šios išraiškos tipas yra Vid?.

Kitaip tariant, b? .ilgis yra spartusis klavišas jei (b! = null) b. ilgis dar nulis. Ši sintaksė gerai susikuria, pašalindama gana daug „prolix“ logikos, ypač kai objektas buvo užpildytas iš daugybės duomenų bazių užklausų, kurių bet kuri galėjo nepavykti. Pavyzdžiui, bob?. skyrius?. galva? .pavadinimas grąžintų Bobo skyriaus vadovo vardą, jei visi Bobas, skyrius ir skyriaus vedėjas nėra niekiniai.

Norėdami atlikti tam tikrą operaciją tik su nulinėmis reikšmėmis, galite naudoti saugaus skambučio operatorių ?. kartu suleisti:

val listWithNulls: List = listOf ("A", null)

for (elementas „listWithNulls“) {

elementas? .let {println (it)} // spausdina A ir ignoruoja nulį}

Dažnai norima grąžinti galiojančią, tačiau specialią reikšmę iš negaliojančios išraiškos, paprastai, kad galėtumėte ją įrašyti į niekuo negalimą tipą. Tam yra speciali sintaksė, vadinama „Elvis“ operatoriumi (aš tavęs ne) ?:.

val l = b?. ilgis?: -1

yra atitikmuo 

val l: Int = jei (b! = nulis) b. ilgis dar -1

Lygiai taip pat Kotlinas praleidžia patikrintas Java išimtis, kurios yra mėtomos sąlygos turi būti pagautam. Pavyzdžiui, JDK parašas

Pridedamas priedas (CharSequence csq) metimai IOException;

reikalauja, kad pagautum IOException kiekvieną kartą, kai skambinate pridėti metodas:

bandyti {

log.append (pranešimas)

}

sugavimas (IOException e) {

// Daryk ką nors su išimtimi

}

„Java“ dizaineriai manė, kad tai buvo gera idėja ir tai buvo naudingas žaislų programų laimėjimas, jei tik programuotojai įgyvendino kažką protingo. pagauti sąlyga. Pernelyg dažnai didelėse „Java“ programose matote kodą, kuriame privaloma pagauti sąlygoje yra tik komentaras: // todo: tvarkyk tai. Tai niekam nepadeda, o patikrintos išimtys pasirodė esančios didelių programų grynasis nuostolis.

Kotlino korutinai

Korutinai Kotline iš esmės yra lengvi siūlai. Jūs pradėsite juos su paleidimas coroutine statybininkas kai kurių kontekste „CoroutineScope“. Vienas iš naudingiausių korutino apimčių yra „runBlocking“ {}, kuris taikomas jo kodo bloko taikymo sričiai.

importuoti kotlinx.coutoutines. *

linksmas pagrindinis () = runBlocking {// this: CoroutineScope

paleisti {// paleisti naują „RunBlocking“ sritį

vėlavimas (1000L) // neužblokuojantis uždelsimas 1 sekundę

println („Pasaulis!“)

    }

println ("Sveiki")

}

Šis kodas sukuria šią išvestį su vienos sekundės vėlavimu tarp eilučių:

Sveiki,

Pasaulis!

„Kotlin“, skirta „Android“

Iki 2017 m. Gegužės vienintelės oficialiai palaikomos „Android“ programavimo kalbos buvo „Java“ ir „C ++“. „Google“ paskelbė oficialų „Kotlin“ palaikymą „Android“ sistemoje „Google I / O 2017“, o pradedant „Android Studio 3.0“, „Kotlin“ yra integruota į „Android“ kūrimo įrankių rinkinį. „Kotlin“ galima pridėti prie ankstesnių „Android Studio“ versijų su papildiniu.

„Kotlin“ kaupia tą patį baito kodą kaip „Java“, natūraliais būdais sąveikauja su „Java“ klasėmis ir dalijasi savo įrankiais su „Java“. Kadangi tarp „Kotlin“ ir „Java“ nėra jokių papildomų skambučių pirmyn ir atgal, „Kotlin“ palaipsniui pridėti prie „Android“ programos, esančios „Java“, yra visiškai logiška. Keletas atvejų, kai Kotlin ir Java kodų sąveikai trūksta malonės, pavyzdžiui, „Java“ nustatytos savybės, retai sutinkamos ir lengvai taisomos.

„Pinterest“ buvo „Android“ programų, paskelbtų Kotline, vaikas jau nuo 2016 m. Lapkričio mėn., Ir tai buvo paminėta „Google I / O 2017“ kaip „Kotlin“ pranešimo dalis. Be to, „Kotlin“ komanda mėgsta cituoti „Android“ skirtas „Evernote“, „Trello“, „Square“ ir „Coursera“ programas.

Kotlinas prieš Java

Klausimas, ar pasirinkti „Kotlin“, ar „Java“ naujai plėtrai, „Android“ bendruomenėje daug iškilo nuo „Google I / O“ pranešimo, nors žmonės jau klausė šio klausimo 2016 m. Vasario mėn., Kai pristatė „Kotlin 1.0“. Trumpas atsakymas yra tas, kad „Kotlin“ kodas yra saugesnis ir glaustesnis nei „Java“ kodas, o „Kotlin“ ir „Java“ failai gali egzistuoti kartu „Android“ programose, todėl „Kotlin“ yra naudinga ne tik naujoms programoms, bet ir plečiant esamas „Java“ programas.

Vienintelis įtikinamas argumentas, kurį mačiau renkantis „Java“, o ne „Kotlin“, būtų visiškai „Android“ kūrimo naujokų atvejis. Jiems gali būti kliūtis peržengti, nes istoriškai dauguma „Android“ dokumentų ir pavyzdžių yra „Java“. Kita vertus, „Java“ pavertimas „Kotlin“ sistemoje „Android Studio“ yra paprastas „Java“ kodo įklijavimo į „Kotlin“ failą dalykas.

Beveik kiekvienam kitam, kuriančiam „Android“, „Kotlin“ privalumai yra įtikinami. Paprastai „Java“ kūrėjui nurodomas laikas mokytis „Kotlin“ yra kelios valandos - nedidelė kaina, kurią reikia sumokėti, kad būtų pašalintos nulinės nuorodų klaidos, įgalintos plėtinio funkcijos, palaikytas funkcinis programavimas ir pridėtos korutinos. Tipiškas apytikris įvertinimas rodo, kad maždaug 40 procentų sumažėjo kodo eilučių skaičius nuo „Java“ iki „Kotlin“.