Programiranje

Kaj je Kotlin? Razložena alternativa Java

Kotlin je splošni, brezplačni, odprtokodni, statično natipkan "pragmatični" programski jezik, ki je bil prvotno zasnovan za JVM (Java Virtual Machine) in Android, ki združuje objektno usmerjene in funkcionalne programske funkcije. Osredotočen je na interoperabilnost, varnost, jasnost in podporo orodjem. V izdelavi so tudi različice Kotlina, ki ciljajo na JavaScript ES5.1 in izvorno kodo (z uporabo LLVM) za številne procesorje.

Kotlin je pri JetBrainsu, podjetju, ki stoji za IntelliJ IDEA, nastal leta 2010, odprtokodna pa je od leta 2012. Ekipa Kotlin trenutno šteje več kot 90 redno zaposlenih iz JetBrains, projekt Kotlin na GitHub pa več kot 300 sodelavcev. JetBrains uporablja Kotlin v številnih svojih izdelkih, vključno s svojim vodilnim IntelliJ IDEA.

Kotlin kot bolj jedrnat jezik Java

Kotlin je na prvi pogled videti bolj strnjena in racionalizirana različica Jave. Upoštevajte zgornji posnetek zaslona, ​​kjer sem vzorec kode Java (levo) samodejno pretvoril v Kotlin. Opazite, da je brezumno ponavljanje, ki je značilno za instanciranje spremenljivk Java, izginilo. Idiom Java

StringBuilder sb = novo StringBuilder ();

Postane v Kotlinu

val sb = StringBuilder ()

Vidite lahko, da so funkcije definirane s zabavno ključna beseda in da so podpičja zdaj neobvezna, če so prisotne nove vrstice. The val ključna beseda razglasi lastnost samo za branje ali lokalno spremenljivko. Podobno je var ključna beseda razglasi spremenljivo lastnost ali lokalno spremenljivko.

Kotlin je kljub temu močno tipkan. The val in var ključne besede je mogoče uporabiti le, če je mogoče določiti vrsto. V nasprotnem primeru morate prijaviti vrsto. Zdi se, da se sklepanje na tip izboljša z vsako izdajo Kotlina.

Oglejte si izjavo funkcije na vrhu obeh podoken. Tip vrnitve v Javi je pred prototipom, v Kotlinu pa sledi prototipu, označen z dvopičjem kot v Pascalu.

Iz tega primera ni povsem očitno, vendar je Kotlin sprostil Javino zahtevo, da so funkcije člani razreda. V Kotlinu se lahko funkcije razglasijo na najvišji ravni v datoteki, lokalno znotraj drugih funkcij, kot funkcija člana znotraj razreda ali predmeta in kot razširitvena funkcija. Funkcije razširitve omogočajo podobnost C #, da razširi razred z novo funkcionalnostjo, ne da bi ga bilo treba podedovati iz razreda ali uporabiti kakršen koli vzorec oblikovanja, kot je Decorator.

Za ljubitelje Groovyja Kotlin izvaja gradbenike; pravzaprav je mogoče gradnike Kotlin preveriti. Kotlin podpira delegirane lastnosti, ki se lahko uporabljajo za izvajanje lenih lastnosti, opaznih lastnosti, lastnosti, ki jih je mogoče uporabiti, in preslikane lastnosti.

Številne asinhrone mehanizme, ki so na voljo v drugih jezikih, je mogoče uporabiti kot knjižnice z uporabo Kotlinovih podprogramov. To vključuje asinh/čakati iz C # in ECMAScript, kanalov in izberite med Go in generatorji/donos iz C # in Pythona.

Funkcionalno programiranje v Kotlinu

Omogočanje funkcij na najvišji ravni je za Kotlin šele začetek zgodbe o funkcionalnem programiranju. Jezik podpira tudi funkcije višjega reda, anonimne funkcije, lambde, vrstne funkcije, zapore, rekurzijo repa in generike. Z drugimi besedami, Kotlin ima vse značilnosti in prednosti funkcionalnega jezika. Upoštevajte na primer naslednje funkcionalne Kotlinove idiome.

Filtriranje seznama v Kotlinu

val pozitivnih vrednosti = list.filter {x -> x> 0}

Za še krajši izraz uporabite to kadar je v funkciji lambda samo en parameter:

val pozitivnih = list.filter {it> 0}

Premikanje po zemljevidu / seznamu parov v Kotlinu

za ((k, v) na zemljevidu) {println (“$ k -> $ v”)}

k inv lahko imenujemo karkoli.

Uporaba obsegov v Kotlinu

za (i v 1..100) {...} // zaprto območje: vključuje 100

za (i v 1 do 100) {...} // polodprto območje: ne vključuje 100

za (x in 2..10 2. korak) {...}

za (x in 10 navzdol do 1) {...}

če (x v 1..10) { ... }

Zgornji primeri kažejoza ključna beseda, kot tudi uporaba obsegov.

Čeprav je Kotlin polnopravni funkcionalni programski jezik, ohranja večino objektno usmerjene narave Jave kot alternativnega sloga programiranja, kar je zelo priročno pri pretvorbi obstoječe kode Java. Kotlin ima razrede s konstruktorji, skupaj z ugnezdenimi, notranjimi in anonimnimi notranjimi razredi in ima vmesnike, kot je Java 8. Kotlin ima ne imajo a novo ključna beseda. Če želite ustvariti primerek razreda, pokličite konstruktor tako kot običajno funkcijo. To smo videli na zgornjem posnetku zaslona.

Kotlin ima enojno dedovanje iz imenovanega superrazreda in vsi razredi Kotlin imajo privzeti superrazred Kaj, kateri je ne enako kot osnovni razred Java java.lang.Object. Kaj vsebuje le tri vnaprej določene funkcije članov: enako (), hashCode (), in toString ().

Kotlinovi razredi morajo biti označeni z odprto ključna beseda, da lahko drugi razredi podedujejo od njih; Razredi Java so nekako nasprotni, saj so podedljivi razen označena z dokončno ključna beseda. Če želite preglasiti metodo superrazreda, mora biti metoda označena sama odprto, metoda podrazreda pa mora biti označena preglasiti. To je vse skupaj s Kotlinovo filozofijo, da stvari naredi eksplicitno, ne pa da se zanaša na privzete vrednosti. V tem konkretnem primeru vidim, kje se Kotlinov način, da izrecno označi člane osnovnega razreda kot odprte za dedovanje in izpeljane člane razreda kot preglasitve, izogne ​​več vrstam pogostih napak Java.

Varnostne funkcije v Kotlinu

Ko smo že govorili o izogibanju pogostim napakam, je bil Kotlin zasnovan tako, da odpravi nevarnost sklicev na ničelne kazalce in poenostavi ravnanje z ničelnimi vrednostmi. To naredi tako, da naredi nič nezakonito za standardne tipe, dodajanje ničelnih vrst in izvajanje zapisov bližnjic za obdelavo testov za ničelno vrednost.

Na primer navadna spremenljivka tipaVrvica ne more držatinič:

var a: String = "abc"

a = null // napaka pri prevajanju

Če morate dovoliti ničelne vrednosti, na primer za zadrževanje rezultatov poizvedbe SQL, lahko deklarirate ničelno vrsto, tako da ji dodate vprašaj, npr. Vrvica?.

var b: Niz?

b = nič // v redu

Zaščita gre malo dlje. Neznačilni tip lahko uporabljate nekaznovano, vendar morate pred uporabo preizkusiti ničelni tip za ničelne vrednosti.

Da bi se izognil podrobni slovnici, ki je običajno potrebna za nično testiranje, Kotlin uvaja a varen klic, napisano ?.. Na primer, b? .dolžina vrne b. dolžina če b ni nič, in nič drugače. Tip tega izraza je Int?.

Z drugimi besedami, b? .dolžina je bližnjica za if (b! = null) b.length else null. Ta sintaksa se lepo veže in odstrani precej logike prolix, še posebej, če je bil objekt izpolnjen iz vrste poizvedb v zbirki podatkov, katere od njih morda niso uspele. Na primer, bob? .oddelek? .glava? .ime bi vrnil ime Bobovega vodje oddelka, če Bob, oddelek in vodja oddelka niso nič.

Če želite izvesti določeno operacijo samo za vrednosti, ki niso nule, lahko uporabite operaterja varnega klica ?. skupaj zpustiti:

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

za (element na seznamuWithNulls) {

element? .let {println (it)} // natisne A in prezre null}

Pogosto želite vrniti veljavno, a posebno vrednost iz ničelnega izraza, običajno zato, da ga lahko shranite v nenulibilni tip. Za to obstaja posebna sintaksa, imenovana Elvis operator (se hecam, da ne), napisana ?:.

val l = b? .dolžina?: -1

je enakovredno 

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

Kotlin izpušča preverjene izjeme Jave, ki so razmere, ki jih je mogoče vrniti mora biti ujet. Na primer podpis JDK

Vrzeti, ki jih je mogoče dodati (CharSequence csq) IOException;

zahteva, da ujamete IOException vsakič, ko pokličete priloži metoda:

poskusite {

log.append (sporočilo)

}

ulov (IOException e) {

// Naredite nekaj z izjemo

}

Oblikovalci Jave so menili, da je to dobra ideja in je bila za igralne programe čista zmaga, če so programerji v ulov klavzulo. V velikih programih Java pa prepogosto vidite kodo, v kateri je obvezno ulov klavzula vsebuje samo komentar: // todo: reši to. To nikomur ne pomaga, preverjene izjeme pa so se izkazale kot čista izguba za velike programe.

Kotlin koroutine

Koreutine v Kotlinu so v bistvu lahke niti. Začnete jih z kosilo gradnik koroutin v kontekstu nekaterih CoroutineScope. Eden najbolj uporabnih področij uporabe je runBlocking {}, ki velja za obseg bloka kode.

uvozi kotlinx.coroutines. *

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

zagon {// zaženite novo podprogram v obsegu runBlocking

zakasnitev (1000L) // neblokirajoča zakasnitev za 1 sekundo

println ("Svet!")

    }

println ("Pozdravljeni,")

}

Ta koda ustvari naslednji izhod z eno sekundo zakasnitve med vrsticami:

Zdravo,

Svet!

Kotlin za Android

Do maja 2017 sta bila edina uradno podprta programska jezika za Android Java in C ++. Google je na Googlovem vhodu / izidu 2017 napovedal uradno podporo za Kotlin v Androidu, začenši z Android Studio 3.0 pa je Kotlin vgrajen v nabor orodij za razvoj Androida. Kotlin je mogoče dodati v starejše različice Android Studio z vtičnikom.

Kotlin prevaja v isto bajtno kodo kot Java, na naraven način sodeluje z razredi Java in svoje orodje deli z Javo. Ker med Kotlinom in Javo ni nobenih dodatnih stroškov za klicanje naprej in nazaj, je postopno dodajanje Kotlina v aplikacijo za Android, ki je trenutno v Javi, povsem smiselno. Redkih primerov, ko interoperabilnost med kodami Kotlin in Javo primanjkuje, kot so lastnosti, ki so nastavljene samo za Javo, je le redko in jih je mogoče enostavno popraviti.

Pinterest je bil podrejeni otrok za aplikacije za Android, napisan v Kotlinu že novembra 2016, in je bil omenjen na Google I / O 2017 kot del Kotlinove objave. Poleg tega ekipa Kotlin rada navaja aplikacije Evernote, Trello, Square in Coursera za Android.

Kotlin proti Javi

Vprašanje, ali izbrati Kotlin ali Javo za nov razvoj, se v skupnosti Android pogosto pojavlja že od objave Google I / O, čeprav so ga ljudje že zastavili februarja 2016, ko je bil Kotlin 1.0 poslan. Kratek odgovor je, da je koda Kotlin varnejša in bolj jedrnata kot koda Java in da datoteke Kotlin in Java lahko sobivata v aplikacijah za Android, tako da Kotlin ni uporaben samo za nove aplikacije, temveč tudi za razširitev obstoječih aplikacij Java.

Edini prepričljiv argument, ki sem ga videl pri izbiri Jave pred Kotlinom, bi bil primer popolnih novincev za razvoj Androida. Zanje bi lahko obstajala ovira, ki jo je treba premagati, saj je v preteklosti večina dokumentacije in primerov za Android v Javi. Po drugi strani pa je pretvorba Jave v Kotlin v programu Android Studio preprosta stvar lepljenja kode Java v datoteko Kotlin.

Skoraj vsi drugi, ki se ukvarjajo z razvojem Androida, so prednosti Kotlina prepričljive. Običajni čas, da se razvijalec Jave nauči Kotlina, je nekaj ur - majhna cena, ki jo je treba plačati za odpravljanje ničelnih referenčnih napak, omogočanje funkcij razširitve, podpiranje funkcionalnega programiranja in dodajanje programov. Tipična groba ocena kaže na približno 40-odstotno zmanjšanje števila vrstic kode od Jave do Kotlina.

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