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.
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.
?.
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
?:
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.
Kotlin har stund, stund och för slingor.
medan
SlingaEtt 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.
göra medan
SlingaKotlin 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.
för
Slingaen 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.
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.
withIndex ()
FungeraVi 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
index
Fast egendomDessutom 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.
Kotlin har tre typer av tillståndsförklaringar: om
, om annat
, och när
uttalanden.
om
PåståendeEn 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")
om annat
PåståendeDe 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"
när
UttryckKotlin 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.
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+!