Kotlin on yleiskäyttöinen, ilmainen, avoimen lähdekoodin, staattisesti kirjoitettu "käytännöllinen" ohjelmointikieli, joka on alun perin suunniteltu JVM: lle (Java Virtual Machine) ja Androidille, ja jossa yhdistyvät olio- ja toiminnalliset ohjelmointiominaisuudet. Se keskittyy yhteentoimivuuteen, turvallisuuteen, selkeyteen ja työkalutukeen. Kotlinin versiot, jotka kohdistavat JavaScript ES5.1: n ja natiivikoodin (käyttäen LLVM: ää) useille prosessoreille, ovat myös tuotannossa.
Kotlin on syntynyt IntelliJ IDEA: n takana olevan yrityksen JetBrainsissa vuonna 2010 ja ollut avoimen lähdekoodin kanssa vuodesta 2012. Kotlin-tiimillä on tällä hetkellä yli 90 kokopäiväistä jäsentä JetBrainsista, ja Kotlin-projektissa GitHubissa on yli 300 avustajaa. JetBrains käyttää Kotlinia monissa tuotteissaan, mukaan lukien lippulaiva IntelliJ IDEA.
Kotlin ytimekkäämmänä Java-kielenä
Ensi silmäyksellä Kotlin näyttää suppeammalta ja virtaviivaisemmalta Java-versiolta. Harkitse yllä olevaa kuvakaappausta, jossa olen muuttanut Java-koodinäytteen (vasemmalla) Kotliniksi automaattisesti. Huomaa, että Java-muuttujien instantisointiin liittyvä järjetön toisto on kadonnut. Java-sanasto
StringBuilder sb = uusi StringBuilder ();
Tulee Kotliniin
val sb = StringBuilder ()
Voit nähdä, että toiminnot määritetään hauskaa
avainsana ja että puolipisteet ovat nyt valinnaisia, kun uusia viivoja on läsnä. val
avainsana ilmoittaa vain luku -ominaisuuden tai paikallisen muuttujan. Samoin var
avainsana ilmoittaa muutettavan ominaisuuden tai paikallisen muuttujan.
Siitä huolimatta Kotlin on voimakkaasti kirjoitettu. val
ja var
avainsanoja voidaan käyttää vain, kun tyyppi voidaan päätellä. Muussa tapauksessa sinun on ilmoitettava tyyppi. Tyyppipäätelmä näyttää parantuvan Kotlinin jokaisen julkaisun yhteydessä.
Katso toimintoilmoitus lähellä molempien ruudujen yläosaa. Palautustyyppi Java-ohjelmassa edeltää prototyyppiä, mutta Kotlinissa se seuraa prototyyppiä, joka on erotettu kaksoispisteellä kuten Pascalissa.
Tämä ei ole täysin selvää tästä esimerkistä, mutta Kotlin on lieventänyt Java: n vaatimusta, että funktiot ovat luokan jäseniä. Kotlinissa funktiot voidaan ilmoittaa tiedostossa ylätasolla, paikallisesti muiden toimintojen sisällä, luokan tai objektin jäsentoimintoina ja laajennustoimintona. Laajennustoiminnot tarjoavat C #: n kaltaisen kyvyn laajentaa luokkaa uusilla toiminnoilla tarvitsematta periä luokalta tai käyttää minkään tyyppisiä suunnittelumalleja, kuten Decorator.
Groovy-faneille Kotlin toteuttaa rakentajia; itse asiassa Kotlinin rakentajille voidaan tehdä tyyppitarkastus. Kotlin tukee delegoituja ominaisuuksia, joita voidaan käyttää laiskojen ominaisuuksien, havaittavien ominaisuuksien, veto-oikeuksien ja kartoitettujen ominaisuuksien toteuttamiseen.
Monet muilla kielillä saatavat asynkroniset mekanismit voidaan toteuttaa kirjastoina käyttämällä Kotlinin korutiineja. Tämä sisältää asynkronoitu
/odottaa
kanavista C # ja ECMAScript, valitse Go ja generaattorit
/saanto
C #: ltä ja Pythonilta.
Toimiva ohjelmointi Kotlinissa
Ylätason toimintojen salliminen on vasta Kotlinin toiminnallisen ohjelmointitarinan alku. Kieli tukee myös korkeamman asteen toimintoja, nimettömiä toimintoja, lambdoja, sisäisiä toimintoja, sulkemisia, hännän rekursiota ja geneerisiä aineita. Toisin sanoen Kotlinilla on kaikki toiminnallisen kielen ominaisuudet ja edut. Harkitse esimerkiksi seuraavia toiminnallisia Kotlin-idioomeja.
Suodattaa luetteloa Kotlinissa
val positiiviset = luettelo.suodatin {x -> x> 0}
Käytä vielä lyhyempää ilmaisua se
kun lambda-funktiossa on vain yksi parametri:
val positiiviset = list.filter {it> 0}
Kartan / pariluettelon kulkeminen Kotlinissa
((k, v) kartalla) {println (“$ k -> $ v”)}
k
jav
voidaan kutsua millä tahansa.
Alueiden käyttö Kotlinissa
varten (i sisään 1..100) {...} // suljettu alue: sisältää 100varten (i sisään 1 - 100) {...} // puoliavoin alue: ei sisällä 100: ta
varten (x sisään 2..10 vaihe 2) {...}
varten (x sisään 10 alas 1) {...}
jos (x sisään 1..10) { ... }
Yllä olevat esimerkit osoittavatvarten
avainsana sekä alueiden käyttö.
Vaikka Kotlin on täysimittainen toiminnallinen ohjelmointikieli, se säilyttää suurimman osan Java: n olio-luonteesta vaihtoehtoisena ohjelmointityylinä, mikä on erittäin kätevää muunnettaessa olemassa olevaa Java-koodia. Kotlinilla on luokkia konstruktoreiden kanssa, sisäkkäisten, sisäisten ja tuntemattomien sisäisten luokkien kanssa, ja sillä on käyttöliittymiä, kuten Java 8. Kotlin tekee ei olla Uusi
avainsana. Luodaksesi luokan ilmentymän, kutsu konstruktoria aivan kuten tavallinen funktio. Näimme sen yllä olevassa kuvakaappauksessa.
Kotlinilla on yksi perintö nimetystä superluokasta, ja kaikilla Kotlin-luokilla on oletusarvoinen yliluokka Minkä tahansa
, mikä on ei sama kuin Java-perusluokka java.lang.objekti
. Minkä tahansa
sisältää vain kolme ennalta määritettyä jäsenfunktiota: on yhtä suuri ()
, hash koodin()
ja toString ()
.
Kotlin-luokat on merkittävä avata
avainsana, jotta muut luokat voivat periä niistä; Java-luokat ovat tavallaan päinvastoin, koska ne ovat periytyviä ellei merkitty lopullinen
avainsana. Yliluokan menetelmän ohittamiseksi itse menetelmä on merkittävä avata
, ja alaluokan menetelmä on merkittävä ohittaa
. Tämä on kaikki pala Kotlinin filosofian kanssa tehdä asioista selkeitä eikä luottaa oletuksiin. Tässä nimenomaisessa tapauksessa näen, missä Kotlinin tapa nimenomaisesti merkitä perusluokan jäsenet avoimiksi perinnölle ja johdetut luokan jäsenet ohituksiksi välttää monenlaisia yleisiä Java-virheitä.
Turvallisuusominaisuudet Kotlinissa
Kun puhutaan yleisten virheiden välttämisestä, Kotlin suunniteltiin poistamaan nullosoittimen viittausten vaara ja tehostamaan nolla-arvojen käsittelyä. Se tekee tämän tekemällä a tyhjä
laiton vakiotyypeille, lisäämällä mitätöitäviä tyyppejä ja toteuttamalla pikavalintamerkintöjä null-testien käsittelemiseksi.
Esimerkiksi säännöllinen tyypin muuttujaMerkkijono
ei voi pitäätyhjä
:
var a: Merkkijono = "abc"a = null // kokoamisvirhe
Jos sinun on sallittava nollat, esimerkiksi SQL-kyselytulosten pitäminen, voit julistaa mitätöitävän tyypin liittämällä kysymykseen tyypin, esim. Merkkijono?
.
var b: Jousisoitin?b = nolla // ok
Suojaukset menevät hieman pidemmälle. Voit käyttää nollaamatonta tyyppiä rankaisematta, mutta sinun on testattava nollattamaton tyyppi nolla-arvojen varalta ennen sen käyttöä.
Välttääkseen tyhjentävään testaukseen normaalisti tarvittavan verboseen kieliopin Kotlin esittelee a turvallinen puhelu, kirjoitettu ?.
. Esimerkiksi, b? .pituus
palaa b. pituus
jos b
ei ole tyhjä
ja tyhjä
muuten. Tämän lausekkeen tyyppi on Int?
.
Toisin sanoen, b? .pituus
on pikakuvake jos (b! = null) b. pituus muu nolla
. Tämä syntaksiketju ketjuu hyvin, eliminoiden melko paljon prolix-logiikkaa, varsinkin kun objekti täytettiin tietokantakyselyjen sarjasta, joista jokin on saattanut epäonnistua. Esimerkiksi, bob? .osasto? .head? .nimi
palauttaisi Bobin osastopäällikön nimen, jos Bob, osasto ja osastopäällikkö eivät ole nollia.
Voit suorittaa tietyn toiminnon vain ei-nolla-arvoille käyttämällä turva puheluoperaattoria ?.
yhdessäpäästää
:
val listWithNulls: Lista = listOf ("A", nolla)haulle (item in listWithNulls) {
item? .let {println (it)} // tulostaa A ja jättää tyhjäksi}
Usein haluat palauttaa kelvollisen mutta erityisen arvon nollaamattomasta lausekkeesta, yleensä jotta voit tallentaa sen nollaamattomaan tyyppiin. Tälle on erityinen syntaksin nimi nimeltä Elvis-operaattori (minä poika sinua ei), kirjoitettu ?:
.
val l = bp. pituus: -1
on vastaava
val l: Int = if (b! = null) b. pituus muu -1
Kotlin jättää samalla tavoin Java tarkastamat poikkeukset, jotka ovat heitettäviä ehtoja on pakko olla kiinni. Esimerkiksi JDK-allekirjoitus
Liittyvä liite (CharSequence csq) -heittoja IOException;
vaatii sinua kiinni IOException
joka kerta, kun soitat liitä
menetelmä:
yrittää {log.append (viesti)
}
saalis (IOException e) {
// Tee jotain lukuun ottamatta
}
Java-suunnittelijoiden mielestä tämä oli hyvä idea, ja se oli nettovoitto leluohjelmille, kunhan ohjelmoijat toteuttivat jotain järkevää saada kiinni
lauseke. Aivan liian usein suurissa Java-ohjelmissa näet kuitenkin koodin, jossa pakollinen saada kiinni
lauseke sisältää vain kommentin: // todo: käsittele tätä
. Tämä ei auta ketään, ja tarkistetut poikkeukset osoittautuivat nettotappioiksi suurille ohjelmille.
Kotlin-korutiinit
Kotlinin korutiinit ovat olennaisesti kevyitä lankoja. Aloitat ne tuoda markkinoille
Coroutine Builderin yhteydessä joihinkin CoroutineScope
. Yksi hyödyllisimmistä korutiineista on runBlocking {}
, joka koskee sen koodilohkon laajuutta.
tuo kotlinx.korutiinit. *fun main () = runBlocking {// tämä: CoroutineScope
launch {// käynnistää uuden korutiinin runBlocking-sovelluksen sisällä
delay (1000L) // ei-estävä viive 1 sekunnin ajan
println ("Maailma!")
}
println ("Hei")
}
Tämä koodi tuottaa seuraavan lähdön sekunnin viiveellä rivien välillä:
Hei,
Maailman!
Kotlin Androidille
Toukokuuhun 2017 saakka ainoat virallisesti tuetut Android-ohjelmointikielet olivat Java ja C ++. Google ilmoitti Kotlinin virallisesta tuesta Androidilla Google I / O 2017: ssä, ja Android Studio 3.0: sta alkaen Kotlin on sisäänrakennettu Android-kehitystyökalusarjaan. Kotlin voidaan lisätä Android Studion aiempiin versioihin laajennuksella.
Kotlin kääntyy samaan tavukoodiin kuin Java, toimii luonnollisesti Java-luokkien kanssa ja jakaa työkalunsa Java: n kanssa. Koska Kotlinin ja Java-palvelujen välillä ei ole yleiskustannuksia edestakaisin soittamiseen, Kotlinin lisääminen vähitellen Java-sovellukseen on järkevää. Harvat tapaukset, joissa Kotlinin ja Java-koodin välisestä yhteentoimivuudesta puuttuu armo, kuten Java-pelkät ominaisuudet, havaitaan harvoin ja korjataan helposti.
Pinterest oli Kotlinissa kirjoitettujen Android-sovellusten julisteen lapsi jo marraskuussa 2016, ja se mainittiin näkyvästi Google I / O 2017: ssä osana Kotlin-ilmoitusta. Lisäksi Kotlin-tiimi haluaa mainita Evernote-, Trello-, Square- ja Coursera-sovellukset Androidille.
Kotlin vs. Java
Kysymys siitä, valitaanko Kotlin vai Java uuteen kehitystyöhön, on tullut paljon esiin Android-yhteisössä Google I / O -ilmoituksen jälkeen, vaikka ihmiset kysyivät jo helmikuussa 2016, kun Kotlin 1.0 toimitettiin. Lyhyt vastaus on, että Kotlin-koodi on turvallisempi ja ytimekkäämpi kuin Java-koodi, ja että Kotlin- ja Java-tiedostot voivat esiintyä rinnakkain Android-sovelluksissa, joten Kotlin ei ole hyödyllinen vain uusien sovellusten lisäksi myös olemassa olevien Java-sovellusten laajentamiseen.
Ainoa vakuuttava argumentti, jonka olen nähnyt Java: n valitsemisesta Kotlinin sijaan, olisi täydellinen Android-kehittäjä. Heille saattaa olla este ylittämiselle, koska historiallisesti suurin osa Android-dokumentaatioista ja esimerkkeistä on Java-kielellä. Toisaalta Java-koodin muuntaminen Kotliniksi Android Studiossa on yksinkertainen asia liittää Java-koodi Kotlin-tiedostoksi.
Lähes kaikille muille, jotka tekevät Android-kehitystä, Kotlinin edut ovat pakottavia. Tyypillinen aika, jonka Java-kehittäjät mainitsevat Kotlinin oppimiseksi, on muutama tunti - pieni hinta maksettavaksi nollaviittausvirheiden poistamiseksi, laajennustoimintojen mahdollistamiseksi, toiminnallisen ohjelmoinnin tukemiseksi ja korutiinien lisäämiseksi. Tyypillinen karkea arvio osoittaa noin 40 prosentin leikkauksen koodirivien määrästä Javasta Kotliniin.