Programovanie

Čo je Kotlin? Vysvetlenie alternatívy Java

Kotlin je univerzálny, bezplatný, otvorený zdrojový, staticky napísaný „pragmatický“ programovací jazyk pôvodne navrhnutý pre JVM (Java Virtual Machine) a Android, ktorý kombinuje objektovo orientované a funkčné programovacie funkcie. Zameriava sa na interoperabilitu, bezpečnosť, jasnosť a podporu nástrojov. Vo výrobe sú aj verzie Kotlin zamerané na JavaScript ES5.1 a natívny kód (pomocou LLVM) pre množstvo procesorov.

Kotlin vznikol v spoločnosti JetBrains, ktorá stojí za spoločnosťou IntelliJ IDEA, v roku 2010 a je otvoreným zdrojom od roku 2012. Tím Kotlin má v súčasnosti viac ako 90 členov na plný úväzok z JetBrains a projekt Kotlin na GitHub má viac ako 300 prispievateľov. Spoločnosť JetBrains používa Kotlin v mnohých svojich produktoch vrátane svojej vlajkovej lode IntelliJ IDEA.

Kotlin ako výstižnejší jazyk Java

Na prvý pohľad vyzerá Kotlin ako výstižnejšia a prehľadnejšia verzia Javy. Zvážte snímku obrazovky vyššie, kde som automaticky previedol ukážku kódu Java (vľavo) na Kotlin. Všimnite si, že bezduché opakovanie, ktoré je vlastné inštancii premenných Java, zmizlo. Frazéma Java

StringBuilder sb = nový StringBuilder ();

Stáva sa v Kotline

val sb = StringBuilder ()

Môžete vidieť, že funkcie sú definované pomocou zábava kľúčové slovo a tieto bodkočiarky sú teraz voliteľné, ak sú k dispozícii nové riadky. The val kľúčové slovo deklaruje vlastnosť iba na čítanie alebo lokálnu premennú. Podobne var kľúčové slovo deklaruje premenlivú vlastnosť alebo lokálnu premennú.

Napriek tomu je Kotlin silne typizovaný. The val a var kľúčové slová možno použiť, iba ak je možné odvodiť typ. V opačnom prípade musíte uviesť typ. Zdá sa, že odvodenie typu sa zlepšuje s každým vydaním Kotlina.

Prezrite si deklaráciu funkcie v hornej časti oboch tabúľ. Návratový typ v Jave predchádza prototyp, ale v Kotline je nástupcom prototypu, ktorý je ohraničený dvojbodkou ako v Pascale.

Z tohto príkladu to nie je úplne zrejmé, ale Kotlin uvoľnil požiadavku Javy, aby boli funkcie členmi triedy. V Kotline môžu byť funkcie deklarované na najvyššej úrovni v súbore, lokálne vo vnútri iných funkcií, ako členská funkcia v triede alebo objekte a ako rozšírená funkcia. Funkcie rozšírenia poskytujú schopnosť C # rozširovať triedu o nové funkcie bez toho, aby ste museli dediť z triedy alebo používať akýkoľvek typ návrhového vzoru, napríklad Decorator.

Pre fanúšikov Groovy implementuje Kotlin staviteľa; v skutočnosti je možné staviteľov Kotlin skontrolovať typom. Kotlin podporuje delegované vlastnosti, ktoré možno použiť na implementáciu lenivých vlastností, pozorovateľných vlastností, vetovateľných vlastností a mapovaných vlastností.

Mnoho asynchrónnych mechanizmov dostupných v iných jazykoch možno implementovať ako knižnice pomocou kotlinských rutín. Toto zahŕňa async/čakať z C # a ECMAScript, kanály a vyberte z Go, a generátory/výnos z C # a Pythonu.

Funkčné programovanie v Kotline

Povolenie funkcií najvyššej úrovne je pre Kotlin len začiatkom príbehu funkčného programovania. Jazyk podporuje aj funkcie vyššieho rádu, anonymné funkcie, lambdy, vložené funkcie, uzávery, rekurziu chvosta a všeobecné výrazy. Inými slovami, Kotlin má všetky funkcie a výhody funkčného jazyka. Zvážte napríklad nasledujúce funkčné Kotlinove idiómy.

Filtrovanie zoznamu v Kotline

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

Pre ešte kratší výraz použite to keď je vo funkcii lambda iba jeden parameter:

val positives = list.filter {it> 0}

Traversing a map / list of pair in Kotlin

pre ((k, v) v mape) {println („$ k -> $ v“)}

k av dá sa nazvať akokoľvek.

Používanie rozsahov v Kotline

pre (i v 1..100) {...} // uzavretý rozsah: zahŕňa 100

pre (i v 1 do 100) {...} // polootvorený rozsah: nezahŕňa 100

pre (x v 2..10. Krok 2) {...}

pre (x v 10 dole do 1) {...}

ak (x v 1..10) { ... }

Vyššie uvedené príklady ukazujúpre kľúčové slovo, ako aj použitie rozsahov.

Aj keď je Kotlin plnohodnotným funkčným programovacím jazykom, zachováva si väčšinu objektovo-orientovanej povahy Javy ako alternatívneho programovacieho štýlu, čo je veľmi užitočné pri prevode existujúceho Java kódu. Kotlin má triedy s konštruktormi spolu s vnorenými, vnútornými a anonymnými vnútornými triedami a má rozhrania ako Java 8. Kotlin má nie mať Nový kľúčové slovo. Ak chcete vytvoriť inštanciu triedy, zavolajte konštruktor rovnako ako bežnú funkciu. Videli sme to na snímke obrazovky vyššie.

Kotlin má jedno dedičstvo z pomenovanej nadtriedy a všetky triedy Kotlin majú predvolenú nadtriedu akýkoľvek, ktorý je nie to isté ako základná trieda Java java.lang.Objekt. akýkoľvek obsahuje iba tri preddefinované členské funkcie: rovná sa (), hashCode ()a natiahnuť().

Kotlinské triedy musia byť označené symbolom otvorené kľúčové slovo, aby sa umožnilo dediť iným triedam; Triedy Java sú opačným javom, pretože sú dedičné pokiaľ označené znakom konečné kľúčové slovo. Ak chcete prepísať metódu nadtriedy, musí byť označená samotná metóda otvorenéa musí byť označená metóda podtriedy prepísať. Toto všetko je súčasťou Kotlinovej filozofie, ktorá dáva veci jasne najavo, a nie spoliehať sa na predvolené hodnoty. V tomto konkrétnom prípade vidím, kde sa Kotlinovým spôsobom výslovného označovania členov základnej triedy ako otvorených pre dedičstvo a odvodených členov triedy ako prepísania vyhýba niekoľkým bežným chybám Java.

Bezpečnostné prvky v Kotline

Keď už hovoríme o vyhýbaní sa bežným chybám, bol Kotlin navrhnutý tak, aby eliminoval nebezpečenstvo odkazov na nulový ukazovateľ a zjednodušil manipuláciu s nulovými hodnotami. Robí to tak, že nulový nelegálne pre štandardné typy, pridávanie typov s možnou hodnotou null a implementácia skratiek na spracovanie testov na hodnotu null.

Napríklad regulárna premenná typuString nemôže držaťnulový:

var a: String = "abc"

a = null // chyba kompilácie

Ak potrebujete povoliť hodnoty null, napríklad na uchovanie výsledkov dotazu SQL, môžete deklarovať typ s možnou hodnotou null pripojením otáznika k typu, napr. Reťazec?.

var b: Reťazec?

b = null // ok

Ochrany idú trochu ďalej. Môžete použiť beztrestný typ beztrestne, ale pred použitím musíte otestovať nulový typ na hodnoty null.

Aby sa zabránilo podrobnej gramatike, ktorá je bežne potrebná na testovanie nuly, zavádza Kotlin a bezpečné volanie, napísané ?.. Napríklad, b? .dĺžka vracia b.dĺžka ak b nie je nulovýa nulový inak. Typ tohto výrazu je Int?.

Inými slovami, b? .dĺžka je skratka pre if (b! = null) b.length else null. Táto syntax reťazí pekne, čo eliminuje dosť logiky prolixu, najmä keď bol objekt vyplnený z radu databázových dotazov, z ktorých každý mohol zlyhať. Napríklad bob? .oddelenie? .hlava?. meno vráti meno vedúceho oddelenia Bob, ak má Bob, oddelenie a vedúci oddelenia nenulové hodnoty.

Ak chcete vykonať určitú operáciu iba pre nenulové hodnoty, môžete použiť operátora bezpečného volania ?. spolu snechajme:

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

pre (položka v zoznameWithNulls) {

item? .let {println (it)} // vypíše A a ignoruje null}

Často chcete vrátiť platnú, ale špeciálnu hodnotu z výrazu s možnou hodnotou Null, zvyčajne preto, aby ste ju mohli uložiť do typu s možnou hodnotou Null. K dispozícii je špeciálna syntax, ktorá sa nazýva operátor Elvis (nechcem vás), napísaná ?:.

val l = b? .dĺžka?: -1

je ekvivalentom 

val l: Int = if (b! = null) b.length else -1

V rovnakom duchu Kotlin vynecháva kontrolované výnimky Javy, čo sú hádzateľné podmienky musieť byť chytený. Napríklad podpis JDK

Pripojiteľný prívesok (CharSequence csq) hodí IOException;

vyžaduje, aby ste chytili Výnimka IO zakaždým, keď zavoláte pridať metóda:

skúsiť {

log.append (správa)

}

chytiť (IOException e) {

// Robte niečo s výnimkou

}

Dizajnéri Java si mysleli, že je to dobrý nápad, a to bola čistá výhra pre programy pre hračky, pokiaľ programátori implementovali do programu niečo rozumné. chytiť doložka. Až príliš často sa vo veľkých programoch Java zobrazuje kód, v ktorom je povinný údaj chytiť doložka neobsahuje nič iné ako komentár: // todo: zvládnite to. To nikomu nepomáha a skontrolované výnimky sa ukázali ako čistá strata pre veľké programy.

Kotlínske rutiny

Coroutiny v Kotline sú v podstate ľahké vlákna. Začínate ich s spustenie coroutine builder v kontexte niektorých CoroutineScope. Jedným z najužitočnejších rozsahov korutínu je runBlocking {}, ktorý sa vzťahuje na rozsah jeho kódového bloku.

importovať kotlinx.coututiny. *

fun main () = runBlocking {// this: CoroutineScope

spustiť {// spustiť nový korutín v rozsahu runBlocking

delay (1000L) // neblokujúce oneskorenie na 1 sekundu

println ("Svet!")

    }

println ("Dobrý deň,")

}

Tento kód produkuje nasledujúci výstup s jednosekundovým oneskorením medzi riadkami:

Ahoj,

Svet!

Kotlin pre Android

Až do mája 2017 boli jedinými oficiálne podporovanými programovacími jazykmi pre Android Java a C ++. Spoločnosť Google ohlásila oficiálnu podporu spoločnosti Kotlin pre Android na konferencii Google I / O 2017 a od verzie Android Studio 3.0 je Kotlin zabudovaná do vývojovej súpravy nástrojov pre Android. Kotlin je možné pridať do starších verzií Android Studio pomocou doplnku.

Kotlin kompiluje do rovnakého bajtového kódu ako Java, prirodzeným spôsobom spolupracuje s triedami Java a zdieľa svoje nástroje s programom Java. Pretože medzi Kotlinom a Javou neexistuje režijné volanie tam a späť, pridanie Kotlina postupne do aplikácie pre Android, ktorá je momentálne v Jave, má zmysel. Niekoľko prípadov, keď interoperabilite medzi Kotlinom a kódom Java chýba milosť, ako sú napríklad vlastnosti sady Java, sú iba zriedka zaznamenané a ľahko opraviteľné.

Pinterest bol potomkom plagátu pre aplikácie pre Android napísaný v Kotline už v novembri 2016 a na stránkach Google I / O 2017 bol spomenutý prominentne v rámci oznámenia Kotlin. Tím Kotlin navyše rád cituje aplikácie Evernote, Trello, Square a Coursera pre Android.

Kotlin vs. Java

Otázka, či si pre nový vývoj zvoliť Kotlin alebo Java, sa v komunite pre Android objavuje už od oznámenia I / O Google, aj keď ľudia si túto otázku pýtali už vo februári 2016, keď bol dodávaný Kotlin 1.0. Krátka odpoveď je, že kód Kotlin je bezpečnejší a stručnejší ako kód Java a že súbory Kotlin a Java môžu koexistovať v aplikáciách pre Android, takže Kotlin je užitočný nielen pre nové aplikácie, ale aj pre rozšírenie existujúcich aplikácií Java.

Jediným pádnym argumentom, ktorý som videl pri výbere Java nad Kotlinom, by bol prípad úplných nováčikov vo vývoji systému Android. Pre nich môže existovať prekážka prekonania, pretože historicky je väčšina dokumentácie a príkladov pre Android v jazyku Java. Na druhej strane, prevod Java na Kotlin v aplikácii Android Studio je jednoduchá záležitosť vloženia kódu Java do súboru Kotlin.

Pre takmer kohokoľvek iného, ​​kto sa venuje vývoju systému Android, sú výhody Kotlina presvedčivé. Typický čas určený na to, aby sa vývojár Java naučil Kotlin, je niekoľko hodín - malá cena, ktorú treba zaplatiť za odstránenie nulových referenčných chýb, povolenie funkcií rozšírenia, podporu funkčného programovania a pridanie korutín. Typický hrubý odhad naznačuje približne 40-percentné zníženie počtu riadkov kódu z Javy do Kotlinu.

$config[zx-auto] not found$config[zx-overlay] not found