En introduksjon til Kotlin

Introduksjon

Helt siden Apple utgitt Swift programmeringsspråk for iOS, har mange Android-utviklere ønsket et lignende språk for Android-utvikling. Hvis du er en av disse utviklerne, kommer du til å elske Kotlin, et JVM-språk som er bemerkelsesverdig som Swift.

Kotlin er et statisk skrevet språk utviklet av JetBrains, hvis syntaks er mer uttrykksdyktig og konsist enn Java. Med funksjoner som høyere rekkefølge funksjoner, lambda uttrykk, operatør overbelastning, streng maler og mer, har Kotlin mye mer å tilby enn Java. Fordi Java og Kotlin er svært interoperable, kan de brukes sammen i samme prosjekt.

Hvis du er en kompetent programmerer i Java, vil du kunne lære Kotlin på svært kort tid. I denne opplæringen vil jeg vise deg hvordan du bruker Kotlins mest brukte konstruksjoner.

Forutsetninger

Å følge med meg, vil du trenge:

  • en god forståelse av Java.
  • den nyeste versjonen av Kotlin-kompilatoren. Alternativt kan du bruke den elektroniske lekeplassen.

1. Klasser

For å opprette en klasse i Kotlin må du bruke klasse søkeord. For eksempel, her er hvordan du oppretter en tom klasse som heter Person:

"java class Person

"

Legge til egenskaper

En klasse har vanligvis egenskaper og medlemsfunksjoner (også kalt metoder). La oss legge til to egenskaper til Person klasse, Navn av type string og alder av type int.

java var navn: String = "" var alder: Int = 0

Som du kan se, er syntaksen for å opprette variabler litt annerledes enn den for Java. For å opprette en variabel i Kotlin må du bruke Var søkeord. Men hvis du vil at variabelen skal være en skrivebeskyttet / tildelings-en gang variabel, bruk val søkeord i stedet.

For nullsikkerhetens skyld skiller Kotlin seg også mellom variabler som kan være null og variabler som aldri kan være null. I vårt forrige eksempel, begge variablene Navn og alder kan aldri være null. Hvis de er null, vil kompilatoren opprette en feil.

Å opprette en variabel som kan holde null, du må legge til en ? etter variabelens type. For eksempel:

java var college: String? = null

Nå som vi har en klasse, er det enkelt å lage en forekomst av det:

java var jake = Person ()

Nei, Kotlin har ikke ny søkeord. Når forekomsten er opprettet, kan du få tilgang til egenskapene på samme måte som i Java:

java jake.name = "Jake Hill" jake.age = 24 jake.college = "Stephen's College"

Bruke byggere

Initialisering av de enkelte egenskapene til vår forekomst, slik vi nettopp gjorde, er ikke en god kodingspraksis. En bedre måte å gjøre dette på, ville være å bruke en konstruktør. Kotlins syntaks for å lage en slik konstruktør er svært kompakt:

"java class Person (var navn: String, var alder: Int, var høyskole: String?)

"

Faktisk, hvis du ikke har noe annet å legge til i klassen din, trenger du ikke de krøllete båndene. Følgende kode fungerer bra:

"java class Person (var navn: String, var alder: Int, var college: String?)

var jake = Person ("Jake Hill", 24, "Stephen's College") "

Det kan allerede være åpenbart for deg at det ikke er mulig å legge til tilpasset kode til denne konstruktøren. Denne konstruktøren, som er en del av klassens header, kalles den primære konstruktøren.

For å legge til flere konstruktører i klassen din, kjent som sekundære konstruktører, bør du bruke konstruktør søkeord. Sekundære konstruktører skal delegere til den primære konstruktøren ved hjelp av dette søkeord. La oss legge til en sekundær konstruktør i vår klasse som initialiserer verdien av en egenskap som heter e-post:

"java class Person (var navn: String, var alder: Int, var høyskole: String?)

var email: String = "" konstruktør (navn: String, alder: Int, høyskole: String ?, email: String): dette (navn, alder, høyskole) this.email = email "

For å lage en forekomst ved hjelp av den sekundære konstruktøren skriver du noe slikt:

java var jake = Person ("Jake Hill", 24, "Stephen's College", "[email protected]")

Legge til medlemsfunksjoner

I Kotlin opprettes funksjoner ved hjelp av moro søkeord. La oss legge til en enkel medlemsfunksjon som heter isEligibleToVote som returnerer a boolean verdi:

"java fun isEligibleToVote (): Boolean // Hvis alderen er større eller lik 18 / return true

returalder> = 18 "

Merk at verdien for returverdi er angitt på slutten av funksjonsoverskriften. Du kan ringe denne metoden på samme måte som i Java:

java jake.isEligibleToVote ()

Opprette utvidelser

Kotlin lar deg utvide en klasse ved å legge til flere funksjoner uten å endre sin opprinnelige definisjon. Slike funksjoner er kjent som utvidelser. Navnene på disse funksjonene skal føres av navnene på klassene de strekker seg til.

For eksempel, for å legge til en utvidelse som heter isTeenager til Person klasse skriver du følgende kode utenfor klassen:

"java morsom Person.isTeenager (): Boolsk

// Hvis alder faller i området // 13-19 returnerer sann returalder i 13 ... 19 "

Denne funksjonen er spesielt nyttig når du vil utvide klasser som ikke tilhører prosjektets kodebase. For eksempel legger følgende kodestykke til en utvidelse containsSpaces til string klasse:

java moro String.containsSpaces (): Boolean return this.indexOf ("")! = - 1

Opprette avledte klasser

Det er viktig å holde følgende i bakhodet når du oppretter en avledet klasse:

  • Du må bruke en : i stedet for Java strekker søkeord.
  • Overskriften til grunnklassen skal ha åpen merknad.
  • Hvis baseklassen din har en konstruktør som tar parametere, bør den avledede klassen initialisere disse parametrene i selve overskriften.

La oss lage en klasse som heter Ansatt som kommer fra Person:

"java open class Person (var navn: String, var alder: Int, var college: String?) ...

klasse Ansatt (navn: String, alder: Int, høyskole: String ?, Var selskap: String): Person (navn, alder, høyskole)

"

Overordnede medlemsfunksjoner

I Kotlin må du eksplisitt anføre at en medlemsfunksjon kan overstyres ved å bruke åpen annotering i metodenes topptekst i grunnklassen. I den avledede klassen kan åpne funksjoner overstyres ved hjelp av overstyring merknad.

For eksempel, for å overstyre isEligibleToVote metode, legger du til følgende kodestykke til Ansatt klasse:

java override fun isEligibleToVote (): Boolean // Alltid returnere ekte retur sann

Opprette statiske metoder

Kotlin tillater deg ikke å opprette statiske metoder. Det gjør det imidlertid mulig å opprette pakkenivåfunksjoner som ikke tilhører noen klasse.

De hoved- Metode er kanskje den mest kjente statiske metoden. Hvis du vil legge til hoved- metode til en pakke som heter com.tutsplus.code.tutorial, så vil koden din se slik ut:

"java pakke com.tutsplus.code.tutorial

morsom hoved (args: Array)

"

2. Funksjoner

Du har allerede lært hvordan du lager enkle funksjoner i de forrige eksemplene. Syntaxen du pleide å opprette disse funksjonene, var veldig lik den til Java. Kotlin lar deg imidlertid gjøre mye mer med funksjoner.

Opprette enkelttrykksfunksjoner

Hvis en funksjon returnerer verdien av et enkelt uttrykk, kan du bruke = operatør etter funksjonsoverskriften etterfulgt av uttrykket for å definere funksjonen.

For eksempel, for å legge til en metode til Person klasse som returnerer ekte hvis personen er en octogenarian, ville du skrive:

java moro isOctogenarian (): Boolean = alder på 80 ... 89

Som du kan se, er denne korte syntaksen mer kompakt og lesbar.

Høyere bestillingsfunksjoner og Lambda-uttrykk

Høyere bestillingsfunksjoner er funksjoner som kan returnere funksjoner eller akseptere funksjoner som parametere. Et lambda-uttrykk, derimot, er bare en funksjon som ikke har noe navn. Vanligvis brukes lambda-uttrykk og høyere ordrefunksjoner sammen.

Vurder følgende eksempel som demonstrerer syntaksen til et lambda-uttrykk:

java x, y -> x + y

Dette er et enkelt lambda-uttrykk som tar to parametere, x og y, og returnerer summen deres. Som du kanskje har gjettet, er parametrene for funksjonen oppført før -> operatør og funksjonens kropp starter etter -> operatør. Dette lambda-uttrykket kan tilordnes en variabel og brukes som følger:

java val sumLambda: (Int, Int) -> Int = x, y -> x + y val actualSum = sumLambda (3,4)

Merk at typen av variabelen som inneholder lambda-uttrykket, spesifiserer typene av parametrene og dens returverdi.

Å lage en høyere ordrefunksjon som kan akseptere lambda-uttrykket som parameter er like enkelt. For eksempel, for å lage en funksjon som dobler resultatet av lambda-uttrykket, ville du skrive:

java moro doubleTheResult (x: Int, y: Int, f: (Int, Int) -> Int): Int return f (x, y) * 2

Du kan ringe denne funksjonen på følgende måte:

java valresultat1 = doubleTheResult (3, 4, sumLambda)

Alternativt kan du sende lambda-uttrykket direkte til høyere rekkefølge:

java valresultat2 = doubleTheResult (3, 4, x, y -> x + y)

Lambda-uttrykk brukes ofte med arrays. For eksempel, vurder følgende rekkevidde av int verdier:

java valnumre: Array = arrayOf (1, 2, 3, 4, 5)

Hvis du vil kvadrat verdien av hvert element i matrisen, kan du bruke kart Fungerer sammen med et lambda-uttrykk som følger:

"java val squaredNumbers = numbers.map (x -> x * x)

// Resultatet vil være et nytt utvalg som inneholder // 1, 4, 9, 16, 25 "

3. Ranges

Range uttrykk brukes ofte i Kotlin. Du har allerede brukt dem mens du oppretter isTeenager og isOctogenarian fremgangsmåter.

For å skape et utvalg, er alt du trenger ... operatør.

"java val r1 = 1 ... 5

// Dette området inneholder nummer 1, 2, 3, 4, 5 "

For å opprette en rekkevidde i synkende rekkefølge, bruk ned til fungere i stedet.

"java val r2 = 5 downTo 1

// Dette området inneholder nummer 5, 4, 3, 2, 1 "

Hvis du ikke vil at trinnet skal være 1, Du kan angi en egendefinert verdi ved hjelp av skritt funksjon.

"java val r3 = 5 downTo 1 trinn 2

// Dette området inneholder nummer 5, 3, 1 "

Du vil se flere utvalgsuttrykk senere i denne opplæringen.

4. Betingede konstruksjoner

hvis

I Kotlin, hvis er et uttrykk som returnerer forskjellige verdier avhengig av om tilstanden er oppfylt. Følgende eksempel illustrerer hvordan dette virker.

"java var alder = 20 val isEligibleToVote = hvis (alder> 18)" Ja "annet" Nei "

// isEligibleToVote vil nå settes til "Yes" "

når

De når uttrykket er lik Java's bytte om. Det er imidlertid mye mer allsidig. For eksempel, vurder følgende eksempel.

"java val alder = 17

val typeOfPerson = når (alder) 0 -> "Nyfødt" i 1 ... 12 -> "Barn" i 13 ... 19 -> "Tenåring" annet -> "Voksen"

// typeOfPerson vil nå bli satt til "Teenager" "

Som du kan se, når kan ikke bare ta enkelte verdier, men også uttrykk som dets forhold.

5. Looping Constructs

for i

I Kotlin kan du bruke for i loop for å løpe gjennom arrays, samlinger, og alt annet som gir en iterator. Syntaxen er nesten identisk med den for Java, bortsett fra bruken av i operatør i stedet for Java : operatør. Følgende eksempel viser deg hvordan du går gjennom en rekke av string objekter.

"java valnavn = arrayOf (" Jake "," Jill "," Ashley "," Bill ")

for (navn i navn) println (navn) "

Med hjelp av rekkeviddeuttrykk kan du gjøre denne løkken oppføre seg som en tradisjonell C-stil, til sløyfe.

"java for (jeg i 0 ... 9) println (i)

// Opptrer akkurat som // for (int i = 0; i<10;i++)"

samtidig som og gjør mens

Syntaxen til samtidig som og gjør mens sløyfer i Kotlin er identisk med syntaksen som brukes i Java. For eksempel løkker følgende Kotlin-kode over en rekke av string objekter ved hjelp av a samtidig som løkke:

"java valnavn = arrayOf (" Jake "," Jill "," Ashley "," Bill ") var i = names.size ()

mens (i> 0) println (navn [-i]) "

6. Stringsmaler

Kotlin lar deg legge inn variabler og uttrykk i strengene ved å pakke dem inn i et par krøllete braces, prefixed av en $ symbol. For eksempel:

"java val name =" Bob "println (" Mitt navn er $ name ") // Utskrifter" Mitt navn er Bob "

val a = 10 val b = 20 println ("Summen er $ a + b") // Utskrifter "Summen er 30" "

Konklusjon

I denne opplæringen lærte du grunnleggende om Kotlins programmeringsspråk. Selv om vi dekket flere konstruksjoner her, har Kotlin mye mer å tilby. Faktisk, fra og med juni 2015, er Kotlin fremdeles bare tilgjengelig som en forhåndsvisning. Det er sannsynlig å se flere forbedringer og nye funksjoner i de kommende månedene.

Hvis du vil vite hvordan du bruker Kotlin i Android Studio, så ta en titt på hvordan du bruker Kotlin i Android-prosjektene dine. For å lære mer om Kotlin-språket, anbefaler jeg at du besøker Kotlin-dokumentasjonen.