Programmēšana

Kas ir Kotlins? Java alternatīva ir izskaidrota

Kotlin ir vispārējas nozīmes, bezmaksas, atvērtā koda, statiski ierakstīta “pragmatiska” programmēšanas valoda, kas sākotnēji izstrādāta JVM (Java Virtual Machine) un Android, kas apvieno objektorientētas un funkcionālas programmēšanas funkcijas. Tas ir vērsts uz sadarbspēju, drošību, skaidrību un instrumentu atbalstu. Tiek ražotas arī Kotlin versijas, kuru mērķis ir JavaScript ES5.1 un vietējais kods (izmantojot LLVM) vairākiem procesoriem.

Kotlina izcelsme ir JetBrains, uzņēmumā IntelliJ IDEA, 2010. gadā, un tā ir atvērta pirmkoda programma kopš 2012. gada. Kotlina komandai pašlaik ir vairāk nekā 90 pilna laika biedri no JetBrains, un Kotlin projektā GitHub ir vairāk nekā 300 līdzstrādnieku. JetBrains izmanto Kotlin daudzos savos produktos, ieskaitot savu flagmani IntelliJ IDEA.

Kotlins kā kodolīgāka Java valoda

No pirmā acu uzmetiena Kotlins izskatās kā kodolīgāka un racionalizētāka Java versija. Apsveriet iepriekš redzamo ekrānuzņēmumu, kurā es automātiski pārveidoju Java koda paraugu (kreisajā pusē) uz Kotlin. Ievērojiet, ka bezjēdzīga atkārtošanās, kas raksturīga Java mainīgo ātrināšanai, ir pazudusi. Java idioma

StringBuilder sb = jauns StringBuilder ();

Kļūst Kotlinā

val sb = StringBuilder ()

Var redzēt, ka funkcijas ir definētas ar jautri atslēgvārdu un ka semikoli tagad nav obligāti, ja ir jaunas rindas. The val atslēgvārds deklarē tikai lasāmu īpašumu vai vietējo mainīgo. Līdzīgi var atslēgvārds deklarē maināmu rekvizītu vai lokālo mainīgo.

Neskatoties uz to, Kotlins ir stingri rakstīts. The val un var atslēgvārdus var izmantot tikai tad, ja var secināt par veidu. Pretējā gadījumā jums ir jāpaziņo veids. Šķiet, ka katra Kotlin laidiena laikā secinājums pēc veida uzlabojas.

Apskatiet funkciju deklarāciju, kas atrodas blakus abām rūtīm. Atgriešanās tips Java ir pirms prototipa, bet Kotlīnā tas ir prototipa sekotājs, kas norobežots ar kolu tāpat kā Paskālā.

No šī piemēra nav pilnīgi skaidrs, taču Kotlins ir atvieglojis Java prasību, ka funkcijām jābūt klases biedriem. Kotlīnā funkcijas var deklarēt faila augšējā līmenī, lokāli citu funkciju iekšienē, kā dalībnieka funkciju klases vai objekta iekšienē un kā paplašināšanas funkciju. Paplašināšanas funkcijas nodrošina C # līdzīgu iespēju paplašināt klasi ar jaunu funkcionalitāti, ne mantojot no klases, ne izmantojot jebkāda veida dizaina modeļus, piemēram, Decorator.

Groovy faniem Kotlin īsteno celtniekus; faktiski Kotlin celtniekiem var veikt tipa pārbaudi. Kotlins atbalsta deleģētos rekvizītus, kurus var izmantot, lai ieviestu slinkās īpašības, novērojamās īpašības, veto īpašības un kartētās īpašības.

Daudzus asinhronos mehānismus, kas pieejami citās valodās, var ieviest kā bibliotēkas, izmantojot Kotlina korutīnas. Tas iekļauj asinhronais/gaidi no C # un ECMAScript, kanālus un atlasiet Go un ģeneratori/raža no C # un Python.

Funkcionāla programmēšana Kotlinā

Augšējā līmeņa funkciju atļaušana ir tikai sākums Kotlin funkcionālās programmēšanas stāstam. Valoda atbalsta arī augstākas kārtas funkcijas, anonīmās funkcijas, lambdas, iekšējās funkcijas, aizvēršanas, astes rekursiju un vispārīgos. Citiem vārdiem sakot, Kotlin ir visas funkcionālās valodas iezīmes un priekšrocības. Piemēram, ņemiet vērā šādas funkcionālās Kotlina idiomas.

Filtrējot sarakstu Kotlīnā

pozitīvi = saraksts.filtrs {x -> x> 0}

Lai iegūtu vēl īsāku izteicienu, izmantojiet to kad lambda funkcijā ir tikai viens parametrs:

pozitīvi = list.filter {it> 0}

Pārvietošanās kartē / pāru sarakstā Kotlīnā

par ((k, v) kartē) {println (“$ k -> $ v”)}

k unv var saukt jebko.

Diapazonu izmantošana Kotlīnā

par (i in 1..100) {...} // slēgtais diapazons: ietver 100

par (i in 1 līdz 100) {...} // daļēji atvērts diapazons: neietver 100

par (x in 2..10. 2. solis) {...}

par (x in 10 uz leju līdz 1) {...}

ja (x in 1..10) { ... }

Iepriekš minētie piemēri parādapriekš atslēgvārdu, kā arī diapazonu izmantošanu.

Lai arī Kotlin ir pilnvērtīga funkcionāla programmēšanas valoda, tā saglabā lielāko daļu Java kā alternatīvā programmēšanas stila objektorientēto raksturu, kas ir ļoti ērti, pārveidojot esošo Java kodu. Kotlīnam ir nodarbības ar konstruktoriem, kā arī ligzdotas, iekšējas un anonīmas iekšējās klases, un tam ir saskarnes, piemēram, Java 8. Kotlin dara pieder jauns atslēgvārds. Lai izveidotu klases instanci, izsauciet konstruktoru tāpat kā parasto funkciju. Mēs to redzējām iepriekš redzamajā ekrānuzņēmumā.

Kotlinam ir viens mantojums no nosaukta superklases, un visām Kotlina klasēm ir noklusējuma superklase Jebkurš, kurš ir tas pats, kas Java bāzes klase java.lang.Object. Jebkurš satur tikai trīs iepriekš definētas dalībnieka funkcijas: vienāds (), hashCode (), un toString ().

Kotlina klasēm jābūt atzīmētām ar atvērts atslēgvārdu, lai ļautu citām klasēm mantot no tiem; Java klases ir kaut kas tieši pretējs, jo tās ir pārmantojamas ja vien atzīmēts ar galīgais atslēgvārds. Lai ignorētu superklases metodi, pašai metodei jābūt atzīmētai atvērts, un apakšklases metode ir jāatzīmē ignorēt. Tas viss ir gabals ar Kotlina filozofiju padarīt lietas skaidras, nevis paļauties uz noklusējumiem. Šajā konkrētajā gadījumā es redzu, kur Kotlina veids, kā skaidri atzīmēt pamatklases dalībniekus kā atvērtus mantošanai un atvasinātus klases locekļus kā ignorējumus, ļauj izvairīties no vairāku veidu izplatītām Java kļūdām.

Drošības funkcijas Kotlīnā

Runājot par izvairīšanos no izplatītākajām kļūdām, Kotlin tika izstrādāts, lai novērstu nulles rādītāju atsauču risku un pilnveidotu nulles vērtību apstrādi. Tas to dara, veicot a nulle nelegāls standarta tipiem, pievienojot nederīgus tipus un ieviešot īsinājumikonus, lai apstrādātu nulles testus.

Piemēram, regulārs tipa mainīgaisStīga nevar turētnulle:

var a: virkne = "abc"

a = null // sastādīšanas kļūda

Ja jums ir nepieciešams atļaut nulles, piemēram, lai saglabātu SQL vaicājumu rezultātus, jūs varat pasludināt par nederīgu tipu, tipam pievienojot jautājuma zīmi, piem. Stīgu?.

var b: Stīgas?

b = nulle // labi

Aizsardzība iet nedaudz tālāk. Varat nesodīti izmantot nenoliedzamu tipu, taču pirms tā izmantošanas ir jāpārbauda, ​​vai nulles vērtības nav derīgas.

Lai izvairītos no daudzbalsīgas gramatikas, kas parasti nepieciešama nulles testēšanai, Kotlins ievieš a drošs zvans, rakstīts ?.. Piemēram, b? .garums atgriežas b. garums ja b nav nulle, un nulle citādi. Šīs izteiksmes veids ir Int?.

Citiem vārdiem sakot, b? .garums ir saīsne domēnam ja (b! = null) b. garums cits null. Šī sintakse labi ķēdē, novēršot diezgan daudz prolix loģikas, it īpaši, ja objekts tika aizpildīts no virknes datu bāzes vaicājumu, no kuriem kāds varētu būt izgāzies. Piemēram, bobs? .nodaļa? .galva? .nosaukums atgrieztu Boba nodaļas vadītāja vārdu, ja visi Bobs, nodaļa un nodaļas vadītājs nav nulle.

Lai noteiktu darbību veiktu tikai ar nulles vērtībām, varat izmantot drošu zvanu operatoru ?. kopā arļaujiet:

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

par (item listWithNulls) {

item? .let {println (it)} // izdrukā A un ignorē nulli}

Bieži vien jūs vēlaties atgriezt derīgu, bet īpašu vērtību no nederīgas izteiksmes, parasti tāpēc, lai to varētu saglabāt nenoliedzamā tipā. Tam ir īpaša sintakse, ko sauc par operatoru Elvis (I kid you not) ?:.

val l = b? .garums?: -1

ir ekvivalents 

val l: Int = ja (b! = nulle) b. garums vēl -1

Kotlins tāpat izlaiž Java pārbaudītos izņēmumus, kas ir izmetami apstākļi jābūt jānoķer. Piemēram, JDK paraksts

Pievienojamie papildinājuma (CharSequence csq) metieni IOException;

prasa noķert IOException katru reizi, kad piezvanāt pievienot metode:

izmēģināt {

log.append (ziņojums)

}

nozveja (IOException e) {

// Dariet kaut ko, izņemot

}

Java dizaineri uzskatīja, ka tā ir laba ideja, un tas ir tīrs ieguvums rotaļlietu programmām, ja vien programmētāji programmā noķert klauzula. Pārāk bieži lielās Java programmās jūs redzat kodu, kurā obligāti noķert klauzula satur tikai komentāru: // todo: rīkojies ar šo. Tas nevienam nepalīdz, un pārbaudītie izņēmumi izrādījās neto zaudējumi lielām programmām.

Kotlina korutīni

Korutīnas Kotlīnā būtībā ir vieglas vītnes. Jūs sākat tos ar palaišana korutīnu celtnieks dažu kontekstā CoroutineScope. Viens no visnoderīgākajiem korutīna darbības jomām ir runBlocking {}, kas attiecas uz tā koda bloka darbības jomu.

importēt kotlinx.coroutines. *

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

palaist {// palaist jaunu korutīnu runBlocking darbības jomā

aizkave (1000L) // nebloķējošā aizkave uz 1 sekundi

println ("Pasaule!")

    }

println ("Sveiki!")

}

Šis kods rada šādu izvadi ar vienas sekundes aizkavi starp rindām:

Sveiki,

Pasaule!

Kotlin operētājsistēmai Android

Līdz 2017. gada maijam vienīgās oficiāli atbalstītās Android programmēšanas valodas bija Java un C ++. Google paziņoja par oficiālu atbalstu Kotlin operētājsistēmā Android vietnē Google I / O 2017, un, sākot ar Android Studio 3.0, Kotlin ir iebūvēts Android izstrādes rīkkopā. Kotlin var pievienot iepriekšējām Android Studio versijām ar spraudni.

Kotlins apkopo to pašu baitu kodu, kas ir Java, dabiskā veidā sadarbojas ar Java klasēm un kopīgi izmanto savus rīkus ar Java. Tā kā starp Kotlin un Java nav nekādu pieskaitāmu zvanu turp un atpakaļ, Kotlina pievienošana Android lietotnei, kas pašlaik atrodas Java, ir pilnīgi jēga. Daži gadījumi, kad Kotlin un Java koda savietojamībai trūkst žēlastības, piemēram, Java tikai komplekta īpašības, tiek reti sastopami un viegli izlabojami.

Pinterest bija plakātu bērns Android lietotnēm, kas Kotlinā tika uzrakstīts jau 2016. gada novembrī, un tas tika skaidri minēts Google I / O 2017 kā daļa no Kotlin paziņojuma. Turklāt Kotlina komandai patīk citēt Android lietotnes Evernote, Trello, Square un Coursera.

Kotlins pret Java

Jautājums par to, vai jaunai attīstībai izvēlēties Kotlin vai Java, Android kopienā ir daudz aktualizējies kopš Google I / O paziņojuma, lai gan cilvēki jau uzdeva jautājumu 2016. gada februārī, kad tika piegādāts Kotlin 1.0. Īsā atbilde ir tāda, ka Kotlin kods ir drošāks un kodolīgāks nekā Java kods, un ka Kotlin un Java faili var pastāvēt līdzās Android lietotnēs, tāpēc Kotlin ir noderīgs ne tikai jaunām lietotnēm, bet arī esošo Java lietotņu paplašināšanai.

Vienīgais pārliecinošais arguments, ko esmu redzējis, izvēloties Java, nevis Kotlin, būtu pilnīgu Android izstrādes iesācēju gadījums. Viņiem varētu būt šķērslis pārvarēšanai, ņemot vērā, ka vēsturiski lielākā daļa Android dokumentācijas un piemēru ir Java. No otras puses, Java konvertēšana uz Kotlin Android Studio ir vienkārša Java koda ielīmēšana Kotlin failā.

Gandrīz ikvienam citam, kurš nodarbojas ar Android izstrādi, Kotlin priekšrocības ir pārliecinošas. Parastais laiks, kas Java izstrādātājam tiek piedāvāts Kotlina apguvei, ir dažas stundas - neliela cena, kas jāmaksā, lai novērstu nulles atsauces kļūdas, iespējotu paplašināšanas funkcijas, atbalstītu funkcionālo programmēšanu un pievienotu korutīnas. Tipisks aptuvens novērtējums norāda, ka koda rindiņu skaits no Java līdz Kotlin ir samazināts par aptuveni 40 procentiem.

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