Kotlin er et moderne programmeringsspråk som kompilerer til Java bytecode. Det er gratis og åpen kildekode, og lover å gjøre koding for Android enda morsommere.
I den forrige artikkelen lærte du om variabler, enkle typer, arrays, kommentarer og type inferanse i Kotlin. I denne opplæringen fortsetter vi å lære språket ved å se på nullabilitet, looper og forhold i Kotlin.
Hvis du er en Android-koder, må du ha kommet over den beryktede NullPointerException
feil i appen din. Disse skjer når du prøver å ringe en metode eller lese en egenskap av en objektreferanse som er null
.
Den gode nyheten er at Kotlin kan hjelpe oss med å unngå denne typen feil fordi det er et null sikkert språk. Det betyr at variabler ikke kan ha verdien null, med mindre du eksplisitt erklærer at typen er nullelig. Med andre ord, kan standardene som standard ikke være null. La oss se hvordan denne funksjonen til Kotlin kan hjelpe oss med å unngå feil i koden vår.
val navn: String = null // vil ikke kompilere
Som du kan se over, hvis vi tilordner null
til Navn
variabel, vil kompilatoren klage. For kompilatoren å tillate oppdraget, erklærer navnet som nullerbar ved å legge til ?
etter typen.
val navn: streng? = null // vil kompilere navn = "Chike" // ny verdi er "Chike"
Merk at hvis ?
er satt inn etter et hvilket som helst type navn, har vi eksplisitt instruert kompilatoren om at verdien av typen kan enten lagre en objektreferanse eller være null
-det er nullable. Her gjorde vi det med string
type, men det fungerer det samme med int?
, byte?
, Lang?
, Klassen min?
, og så videre.
?.
La oss lære mer om hvordan null-sikkerhet fungerer i Kotlin med en operatør som kalles den sikre samtaleoperatøren ?.
.
Var navn: String? = null utskrift (name.length) // vil ikke kompilere
Koden ovenfor vil ikke kompilere fordi Kotlin er et null-sikker språk. Variabelen Navn
er tildelt verdien null
. Nå, påkaller eiendommen lengde
på den variabelen ville utløse a NullPointerException
feil i Java. Men Kotlin-kompilatoren vil ikke tillate invokasjon av denne egenskapen fordi variabelen kan være null
. Kompilatoren vil ikke tillate oss å gjøre noe som kan generere en NullPointerException
!
Val v: String? = null utskrift (v? .length) // vil kompilere og skrive ut "null"
Nå, ved å legge til den sikre anropsoperatøren ?.
til variabelen før du påkaller eiendommen, har vi eksplisitt instruert kompilatoren til å påkalle eiendommen bare hvis verdien ikke er null
. Hvis verdien er null
, kompilatoren vil bruke strengen "null"
som verdien for oss. Dette fungerer også for metoder og ikke bare egenskaper.
Når du kaller en nullstillingsmetode, vil returtypen også være nullerbar. Så, for eksempel, retur type av v? .length
uttrykk når v
er nullable vil være int?
.
Val v: String? = null val len: Int? = v? .length print (len) // vil kompilere og skrive ut "null"
For å omgå nullabilitetskontroll av Kotlin-kompilatoren, kan vi erstatte ?.
operatør med !!.
. Dette anbefales ikke, men på grunn av høy sannsynlighet for å få NullPointerException
feil hvis brukt.
Val v: String? = null val len: Int? = v.. lengdeutskrift (len) // utløser en NullPointerException-feil
?:
Denne operatøren ?:
kalles Elvis-operatøren (fordi formen ser ut som Elvis's head). Det brukes til å gi en alternativ verdi for variabelen hvis den er null
.
val brukernavn = null val navn: String = brukernavn?: "Ingen navn" print (navn) // vil kompilere og skrive ut "Ingen navn"
Her tilordnet kompilatoren strengen "Ingen navn"
til variabelen Navn
, fordi det første verdien brukernavnet er null
. Hvis den første verdien ikke var null
, da vil verdien bli tilordnet variabelen i stedet.
Kotlin har stund, stund, og for løkker.
samtidig som
LoopEn gjentakelseserklæring gir oss mulighet til å spesifisere at koden skal gjenta en handling, mens noen tilstand forblir oppfylt.
Så i Kotlin, ved hjelp av samtidig som
loop er samme som i andre språk som Java.
mens (tilstand) // kjør kode her mens (drivstoff> 5) driveMeAroundLagos ()
Så lenge tilstanden er sant, vil koden inne i de krøllete båndene eller loopens kropp bli utført. Hvis tilstanden er feil, vil koden ikke bli utført. I vårt eksempel ovenfor, når drivstoffvariabelen blir mindre enn 5 liter, blir tilstanden feil og deretter slår sløyfen seg. Med andre ord, driveMeAroundLagos ()
Metoden kjøringen stopper.
gjør mens
LoopKotlin har også gjør mens
loop konstruksjon.
gjør // kjør kode her mens (tilstand)
Dette ligner på samtidig som
uttalelse. I løpet av løpet, tester programmet sløyfeforholdet ved begynnelsen av sløyfen før du utfører sløyfens kropp. Hvis tilstanden er feil, blir ikke kroppen utført. Men gjør mens
loop tester tilstanden etter å ha utført loopens kropp. Dette betyr at kroppen utføres minst en gang.
til
LoopEN til
loop er en repetisjon uttalelse som gjør oss i stand til å iterate over objekter mens en gitt tilstand er sant.
for (verdi i området) // Kjør kode
I Kotlin, den til
loop konstruksjon arbeider med iterasjon over områder, samlinger eller andre iterables (jeg vil forklare mer om disse i neste innlegg). For sløyfer samarbeider med i
operatør, som brukes til å finne ut om en verdi er tilstede i et gitt område.
for (a i 1 ... 5) print ("$ a") // vil skrive ut 1 2 3 4 5
I koden ovenfor er det itererer gjennom et lukket område 1 til 5 og skriver ut hver verdi i området.
Vi kan bruke withIndex ()
funksjon eller indekser
Egenskapen på en matrise for å iterere over en matrise der vi trenger indeksen for hvert element.
withIndex ()
FunksjonVi kan iterere over en matrise for å få tilgang til hvert elements indeks ved å ringe withIndex ()
Funksjon på array, fordi withIndex ()
funksjonen returnerer en iterable av IndexedValue
skriv for hvert element. Dette gir oss tilgang til både indeksen og verdien for hvert element fra den.
val numbersArray = intArrayOf (1,2,3,4,5) for ((indeks, verdi) i talleneArray.withIndex ()) print ("$ indeksindeksverdi er $ verdi \ n")
Koden ovenfor vil skrive ut resultatet nedenfor:
0 indeksverdi er 1 1 indeksverdi er 2 2 indeksverdi er 3 3 indeksverdi er 4 4 indeksverdi er 5
indekser
EiendomVidere kan vi bruke indekser
eiendom på arrayen. Dette vil bare returnere utvalg av gyldige indekser for arrayet.
val numbers1 = intArrayOf (1,2,3,4,5) for (indeks i numbers1.indices) print ("$ indeksindeksverdien er $ numbers1 [index] \ n")
Ovennevnte kode vil gi samme resultat som forrige eksempel. Du kan også se her at vi kan bruke indeksen for å få tilgang til et arrayelement, på samme måte som andre programmeringsspråk som Java.
Kotlin har tre typer tilstandserklæringer: The hvis
, hvis ... annet
, og når
uttalelser.
hvis
Uttalelseen hvis
setningen kjører noen kode hvis en tilstand er sant, eller bare hopper over det hvis tilstanden er feil. Ikke noe spesielt her: hvis
uttalelser fungerer på samme måte som de gjør i de fleste andre programmeringsspråk, inkludert Java.
val nummer = 20 hvis (tall% 2 == 0) print ("$ nummer er delbart med 2") // 20 er delbart med 2
Vi kan også sjekke om en variabel er av en bestemt type ved hjelp av er
søkeord.
hvis (tall er Int) print ("$ tall er et heltall")
hvis ... annet
UttalelseDe hvis ... annet
utfører en handling hvis tilstanden er sant og utfører en annen handling hvis tilstanden er feil.
val nummer = 13 hvis (tall% 2 == 0) print ("$ nummer er delbart med 2") else print ("$ nummer er ikke delbart med 2") // 13 er ikke delbart med 2
En viktig funksjon som skiller mellom hvis ... annet
setning i Kotlin fra andre programmeringsspråk som Java er muligheten til å tilordne en variabel fra den returnerte verdien av hvis ... annet
uttalelse. Dette er mulig fordi en hvis ... annet
uttalelse kan brukes ikke bare som en uttalelse, men også som et uttrykk i Kotlin.
val nummer = 13 valresultat = hvis (tall% 2 == 0) "$ nummer er delbart med 2" annet "$ nummer er ikke delbart med 2" print (resultat) // 13 er ikke delelig med 2
I koden ovenfor tildelte vi resultat
variabel med a string
objekt basert på tilstanden til hvis ... annet
uttalelse. Vær oppmerksom på at dette bare vil returnere den siste setningen i en bestemt tilstandsblokk og også at du ikke kan bruke en hvis
uten en ellers
som et uttrykk.
valresultat = hvis (tall% 2 == 0) "Delbart med 2" "Tall er $ nummer" // bare denne strengen returneres hvis henrettet ellers "Ikke delelig med 2" "Tall er $ tall"
når
UttrykkKotlin introduserte når
konstruere som erstatning for kjente bytte om
uttalelse vi har i forskjellige programmeringsspråk som C + +, Java, og så videre. når
er mer konsistent og har mer kraftige funksjoner enn bytte om
uttalelse du kanskje er kjent med.
De når
setningen utfører forskjellige handlinger basert på mulige verdier av en konstant av typen int
, string
, byte
, Kort
, eller noe annet objekt.
morsomt guessTheNumber (nummer: Int) når (tall) 1 -> println ("tall er 1") 2 -> println ("tall er 2") 3 -> println ("tall er 3") ellers -> println ("tallet er verken 1, 2 eller 3")
I koden ovenfor passerte vi funksjonen guessTheNumber ()
en tallparameter (vi diskuterer funksjoner i Kotlin i et senere innlegg). De når
uttrykk kontrollerer da om noen av grenene samsvarer med verdien av Nummer
og deretter utfører handlingen på den grenen. Hvis ingen av grenene var en kamp, ellers
gren er utført.
En annen variant av når
uttrykk krever ikke noe argument, som i eksemplet nedenfor.
morsomt guessTheNumber (tall: Int) når tall == 1 -> println ("tall er 1") tall == 2 -> println ("tall er 2") tall == 3 -> println ("tall er 3 ") ellers -> println (" tallet er verken 1, 2 eller 3 ")
Hvis vi ønsker å utføre mer enn en handling på en gren, må vi pakke opp handlingene i krøllete braces .
val nummer = 2 når (tall) 1 -> println ("tall er 1") 2 -> // blokk kode utført println ("tall er 2") println ("det er et jevnt tall") 3 -> println ("tall er 3")
Videre kan vi kombinere testverdier i en enkelt gren.
val nummer = 2 når (tall) 1, 2 -> println ("tall er enten 1 eller 2") // tall er enten 1 eller 2 3 -> println ("tall er 3")
Her blir den første grenen utført fordi vi tester for en verdi på enten 1 eller 2.
I denne opplæringen lærte du om nullabilitet, looper og forhold i Kotlins programmeringsspråk. I neste opplæring i Kotlin From Scratch-serien lærer du om programvaren og samlinger API i Kotlin. Ser deg snart!
For å lære mer om Kotlin-språket, anbefaler jeg at du besøker Kotlin-dokumentasjonen. Eller sjekk ut noen av våre andre Kotlin-opplæringsprogrammer her på Envato Tuts+!