Kotlin fra scratch Nullability, Loops, and Conditions

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.

1. Nullability

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. 

Den sikre samtaleoperatøren: ?.

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

Elvis Operatør: ?:

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.

2. Looper

Kotlin har stund, stund, og for løkker. 

De samtidig som Loop

En 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. 

De gjør mens Loop

Kotlin 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.

De til Loop

EN 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. 

Iterering over en indeksarray

Vi kan bruke withIndex () funksjon eller indekser Egenskapen på en matrise for å iterere over en matrise der vi trenger indeksen for hvert element.

Bruker withIndex () Funksjon

Vi 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

Bruker indekser Eiendom

Videre 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.

3. Betingelser

Kotlin har tre typer tilstandserklæringer: The hvis, hvis ... annet, og når uttalelser. 

De hvis Uttalelse

en 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") 

De hvis ... annet Uttalelse

De 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"

De når Uttrykk

Kotlin 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.

Konklusjon

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+!