Kotlin från scratch Nullability, Loops och Conditions

Kotlin är ett modernt programmeringsspråk som kompilerar till Java bytecode. Det är gratis och öppen källkod, och lovar att göra kodning för Android ännu roligare.  

I den föregående artikeln lärde du dig om variabler, enkla typer, arrays, kommentarer och typinferens i Kotlin. I denna handledning fortsätter vi att lära sig språket genom att titta på nullabilitet, loopar och villkor i Kotlin.

1. Nullbarhet

Om du är en Android-kodare måste du ha stött på den ökända NullPointerException fel i din app. Dessa händer när du försöker ringa en metod eller läsa en egenskap av en objektreferens som är null

Den goda nyheten är att Kotlin kan hjälpa oss att undvika den här typen av fel eftersom det är ett noll säkert språk. Det betyder att variabler inte kan ha värdet noll om du inte uttryckligen förklarar att deras typ är nullställbar. Med andra ord kan typerna som standard inte vara noll. Låt oss se hur denna funktion hos Kotlin kan hjälpa oss att undvika fel i vår kod. 

val namn: String = null // kommer inte att kompilera

Som du kan se ovan, om vi tilldelar null till namn variabel kommer kompilatorn att klaga. För att kompilatören ska tillåta uppdraget, förklara namnet som en nullerbar genom att lägga till ? efter typen.

val namn: String? = null // kommer kompilera namn = "Chike" // nytt värde är "Chike"

Observera att om ? infogas efter något typnamn har vi uttryckligen instruerat kompilatorn om att värdet av typen kan antingen lagra en objektreferens eller kan vara null-det är nollställbart. Här gjorde vi det med Sträng typ, men det fungerar detsamma med int?, byte?Lång?, Min klass?, och så vidare. 

Säker samtalsoperatör: ?.

Låt oss lära oss mer om hur nollsäkerhet fungerar i Kotlin med en operatör som kallas säker samtalsoperatör ?..

Var namn: String? = null print (name.length) // kommer inte att kompilera

Koden ovan kommer inte att kompileras eftersom Kotlin är ett nollssäkert språk. Variabeln namn tilldelas värdet null. Nu anropar egendomen längd på den variabeln skulle utlösa a NullPointerException fel i Java. Men Kotlin-kompilatorn tillåter inte invokation av den här egenskapen eftersom variabeln kan vara null. Kompilatorn tillåter inte oss att göra något som kan generera en NullPointerException!

val v: String? = null print (v? .length) // kommer att kompilera och skriva ut "null"

Nu, genom att lägga till den säkra samtaloperatören ?. till variabeln innan du anropar egenskapen, har vi uttryckligen instruerat kompilatorn att bara anropa egenskapen om värdet inte är det null. Om värdet är null, kompilatorn kommer att använda strängen "null" som värdet för oss. Detta fungerar också för metoder och inte bara egenskaper. 

När du kallar en metod för nullställbarhet kommer returtypen också att vara nullställbar. Så, till exempel, returtypen för v? .length uttryck när v är nollställbart kommer att vara int?

val v: String? = null val len: Int? = v? .length print (len) // kommer att kompilera och skriva ut "null"

För att kringgå nollkompatibilitetskontroll av Kotlin-kompilatorn kan vi ersätta ?. operatör med !!.. Detta rekommenderas dock inte på grund av den höga sannolikheten att få NullPointerException Fel om det används.  

val v: String? = null val len: Int? = v !!. längdutskrift (len) // utlöser ett NullPointerException-fel

Elvis Operatören: ?:

Denna operatör ?: kallas Elvis operatör (eftersom dess form ser ut som Elvis huvud). Den används för att ge ett alternativt värde för variabeln om den är null.  

val användarnamn = null val namn: String = användarnamn?: "Inget namn" skriv ut (namn) // kommer att kompilera och skriva ut "Inget namn"

Här tilldelade kompilatorn strängen "Inget namn" till variabeln namn, eftersom det första värden användarnamnet är null. Om det första värdet inte var null, då skulle värdet tilldelas variabeln istället.

2. Slingor

Kotlin har stund, stund och för slingor. 

De medan Slinga

Ett upprepningsdeklaration låter oss ange att koden ska upprepa en åtgärd medan vissa villkor är sanna.

Så i Kotlin, med hjälp av medan loop är samma som på andra språk som Java.

medan (villkor) // kör kod här medan (bränsle> 5) driveMeAroundLagos ()

Så länge som villkoret är sant, kommer koden inuti de lockiga axlarna eller slingans kropp att utföras. Om villkoret är felaktigt, kommer koden inte att utföras. I vårt exempel ovan, när bränslevariabeln blir mindre än 5 liter, blir tillståndet falskt och sedan släcks upphöringen. Med andra ord, driveMeAroundLagos () metodkörning stannar. 

De göra medan Slinga

Kotlin har också göra medan slingkonstruktion. 

gör // kör kod här medan (villkor)

Detta liknar medan påstående. I mellanslingan testar programmet slingförhållandet i början av slingan innan du utför slingens kropp. Om tillståndet är felaktigt utförs kroppen inte. Men göra medan slinga tester villkoret efter att ha genomfört slingans kropp. Detta innebär att kroppen exekveras minst en gång.

De för Slinga

en för loop är ett repetitions uttalande som gör att vi kan iterera över objekt medan ett givet villkor är sant.

för (värde inom intervallet) // exekvera kod 

I Kotlin, den för loop konstruktion arbetar med iteration över intervall, samlingar eller andra iterables (jag kommer att förklara mer om dessa i nästa inlägg). För loopar arbetar tillsammans med i operatör, som används för att se om ett värde är närvarande i ett visst intervall.

för (a i 1 ... 5) print ("$ a") // kommer att skriva ut 1 2 3 4 5

I koden ovan är vi iterera genom ett slutet område 1 till 5 och skriver ut varje värde i intervallet. 

Iterating över en index-uppsättning

Vi kan använda withIndex () funktion eller index egenskap på en array för att iterera över en array där vi behöver indexet för varje element.

Använda withIndex () Fungera

Vi kan iterera över en array för att komma åt varje elements index genom att ringa withIndex () funktion på arrayen, eftersom withIndex () funktionen returnerar en iterbar av IndexedValue skriv för varje element. Detta låter oss få tillgång till både indexet och värdet för varje element från det.

val numbersArray = intArrayOf (1,2,3,4,5) för ((index, värde) i numbersArray.withIndex ()) print ("$ indexindexvärde är $ värde \ n")

Koden ovan kommer att skriva ut resultatet nedan:

0 indexvärde är 1 1 indexvärde är 2 2 indexvärde är 3 3 indexvärde är 4 4 indexvärdet är 5

Använda index Fast egendom

Dessutom kan vi använda index egendom på matrisen. Detta kommer bara att returnera sortimentet av giltiga index för matrisen.

val numbers1 = intArrayOf (1,2,3,4,5) för (index i numbers1.indices) print ("$ indexindexvärdet är $ numbers1 [index] \ n")

Ovanstående kod kommer att ge samma resultat som föregående exempel. Du kan också se här att vi kan använda indexet för att komma åt ett arrayelement, på samma sätt som andra programmeringsspråk som Java.

3. Villkor

Kotlin har tre typer av tillståndsförklaringar: om, om annat, och när uttalanden. 

De om Påstående

En om uttalandet körs någon kod om ett villkor är sant eller helt enkelt hoppar om villkoret är felaktigt. Inget speciellt här: om uttalanden fungerar på samma sätt som de gör på de flesta andra programmeringsspråk, inklusive Java. 

val nummer = 20 om (antal% 2 == 0) print ("$ nummer är delbart med 2") // 20 är delbart med 2

Vi kan också kontrollera om en variabel är av en viss typ med hjälp av är nyckelord. 

om (talet är Int) print ("$ nummer är ett heltal") 

De om annat Påstående

De om annat utför en åtgärd om villkoret är sant och utför en annan åtgärd om villkoret är felaktigt.

val nummer = 13 om (antal% 2 == 0) print ("$ nummer är delbart med 2") annars print ("$ nummer är inte delbart med 2") // 13 är inte delbart med 2

En viktig egenskap som särskiljer om annat uttalande i Kotlin från andra programmeringsspråk som Java är förmågan att tilldela en variabel från det returnerade värdet av  om annat påstående. Detta är möjligt eftersom en om annat uttalandet kan användas inte bara som ett uttalande, men också som ett uttryck i Kotlin.

val nummer = 13 valresultat = om (tal% 2 == 0) "$ nummer är delbart med 2" annars "$ tal är inte delbart med 2" print (resultat) // 13 är inte delbart med 2

I koden ovan tilldelade vi resultat variabel med a Sträng objekt baserat på tillståndet hos om annat påstående. Var medveten om att detta endast kommer att returnera det sista uttalandet i ett visst tillstånd och att du inte kan använda en om utan en annan som ett uttryck. 

valresultat = om (tal% 2 == 0) "Delbart med 2" "Nummer är $ nummer" // endast denna sträng returneras om den exekveras annars "Ej delbar med 2" "Nummer är $ nummer"

De när Uttryck

Kotlin introducerade när konstruera som ersättare för den bekanta växla uttalande vi har i olika programmeringsspråk som C ++, Java, och så vidare. när är mer koncis och har mer kraftfulla funktioner än växla uttalande du kanske känner till. 

De när uttalandet utför olika åtgärder baserat på möjliga värden för en konstant av typen int, Sträng, byte, Kort, eller något annat objekt. 

roligt guessTheNumber (nummer: Int) när (nummer) 1 -> println ("number is 1") 2 -> println ("number is 2") 3 -> println ("talet är varken 1, 2 eller 3")

I koden ovan passerade vi funktionen guessTheNumber () en talparameter (vi diskuterar funktioner i Kotlin i ett senare inlägg). De när uttryck kontrollerar då om någon av grenarna matchar värdet på siffra och utför sedan åtgärden på den grenen. Om ingen av grenarna var en match, annan gren utförs. 

En annan variant av när uttryck kräver inget argument, som i exemplet nedan.

roligt guessTheNumber (antal: Int) när number == 1 -> println ("number is 1") number == 2 -> println ("number is 2") number == 3 -> println ") annars -> println (" talet är inte 1, 2 eller 3 ")

Om vi ​​vill utföra mer än en åtgärd på en filial, måste vi sätta igång handlingarna i lockiga axlar .

val nummer = 2 när (antal) 1 -> println ("number is 1") 2 -> // block av kod exekverat println ("number is 2") println ("det är ett jämnt tal") 3 -> println ("nummer är 3")

Dessutom kan vi kombinera testvärden i en enda filial.

val nummer = 2 när (nummer) 1, 2 -> println ("nummer är antingen 1 eller 2") // tal är antingen 1 eller 2 3 -> println ("talet är 3")

Här körs den första grenen eftersom vi testar för ett värde av antingen 1 eller 2.

Slutsats

I denna handledning lärde du dig om nullabilitet, loopar och villkor i Kotlins programmeringsspråk. I nästa handledning i Kotlin From Scratch-serien lär du dig information om API-intervall och samlingar i Kotlin. Ses snart!

För att lära mig mer om Kotlins språket rekommenderar jag att du besöker Kotlins dokumentation. Eller kolla in några av våra andra Kotlin-tutorials här på Envato Tuts+!