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.
Å følge med meg, vil du trenge:
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
"
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"
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]")
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 ()
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
Det er viktig å holde følgende i bakhodet når du oppretter en avledet klasse:
:
i stedet for Java strekker
søkeord.åpen
merknad.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)
"
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
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
"
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.
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 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
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 "
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.
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.
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]) "
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" "
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.