Kotlin is een moderne programmeertaal die compileert met Java bytecode. Het is gratis en open source en belooft om het coderen voor Android nog leuker te maken.
In het vorige artikel heb je geleerd over variabelen, eenvoudige typen, arrays, opmerkingen en type gevolgtrekking in Kotlin. In deze zelfstudie blijven we de taal leren door naar nullabiliteit, loops en omstandigheden in Kotlin te kijken.
Als je een Android-coder bent, moet je de beruchte tegengekomen zijn NullPointerException
fouten in uw app. Dit gebeurt telkens wanneer u een methode probeert te gebruiken of een eigenschap van een objectreferentie wilt lezen die dat wel is nul
.
Het goede nieuws is dat Kotlin ons kan helpen dit soort fouten te vermijden, omdat het een nul veilige taal is. Dat betekent dat variabelen niet de waarde null kunnen hebben, tenzij u expliciet aangeeft dat hun type nululeerbaar is. Met andere woorden, standaardtypen mogen niet leeg zijn. Laten we eens kijken hoe deze functie van Kotlin ons kan helpen om fouten in onze code te voorkomen.
valnaam: String = null // kan niet worden gecompileerd
Zoals je hierboven kunt zien, als we toewijzen nul
naar de naam
variabele, de compiler zal klagen. Voor de compiler om de opdracht toe te staan, verklaart u de naam als een nullabel door toe te voegen ?
na het type.
val naam: String? = null // compileert naam = "Chike" // nieuwe waarde is "Chike"
Merk op dat als ?
wordt ingevoegd na elke type naam, hebben we de compiler expliciet geïnstrueerd dat de waarde van het type een objectreferentie kan opslaan of kan worden nul
-het is nihil. Hier deden we het met de Draad
type, maar het werkt hetzelfde met Int?
, Byte?
, Lang?
, Mijn klas?
, enzovoorts.
?.
Laten we meer te weten komen over hoe null-safety werkt in Kotlin met een operator die de operator voor veilige oproepen wordt genoemd ?.
.
var naam: String? = null print (naam.lengte) // zal niet compileren
De bovenstaande code compileert niet omdat Kotlin een ongeldige taal is. De variabele naam
krijgt de waarde toegewezen nul
. Nu een beroep op het onroerend goed lengte
op die variabele zou a activeren NullPointerException
fout in Java. Maar de Kotlin-compiler staat het aanroepen van deze eigenschap niet toe omdat de variabele zou kunnen zijn nul
. De compiler staat ons niet toe iets te doen dat een a kan genereren NullPointerException
!
val v: String? = null print (v? .length) // compileert en print "null"
Nu, door de safe-call-operator toe te voegen ?.
om de variabele vóór het aanroepen van de eigenschap, hebben we de compiler expliciet opdracht gegeven om de eigenschap alleen aan te roepen als de waarde dat niet is nul
. Als de waarde is nul
, de compiler gebruikt de string "nul"
als de waarde voor ons. Dit werkt ook voor methoden en niet alleen voor eigenschappen.
Wanneer u een methode van een nullabel oproept, is het retourtype ook nihil. Dus bijvoorbeeld het retourtype van de v? .length
uitdrukking wanneer v
is nullable zal zijn Int?
.
val v: String? = null val len: Int? = v? .length print (len) // compileert en print "null"
Om de nullability-controle door de Kotlin-compiler te omzeilen, kunnen we de ?.
operator met !!.
. Dit wordt echter niet aanbevolen, vanwege de grote kans om te krijgen NullPointerException
fouten indien gebruikt.
val v: String? = null val len: Int? = v !!. length print (len) // triggert een NullPointerException-fout
?:
Deze operator ?:
wordt de Elvis-operator genoemd (omdat de vorm ervan lijkt op het hoofd van Elvis). Het wordt gebruikt om een alternatieve waarde voor de variabele te geven als dit het geval is nul
.
val gebruikersnaam = null val naam: String = gebruikersnaam?: "Geen naam" print (naam) // zal compileren en afdrukken "Geen naam"
Hier heeft de compiler de string toegewezen "Geen naam"
naar de variabele naam
, omdat de gebruikersnaam voor de eerste waarde is nul
. Als de eerste waarde niet was nul
, dan zou die waarde in plaats daarvan aan de variabele worden toegewezen.
Kotlin heeft terwijl, do-while en voor loops.
terwijl
LusEen herhalingsverklaring stelt ons in staat om aan te geven dat de code een actie moet herhalen terwijl een bepaalde voorwaarde waar blijft.
Dus in Kotlin, met behulp van de terwijl
loop is hetzelfde als in andere talen, zoals Java.
while (voorwaarde) // voer hier code uit terwijl (brandstof> 5) driveMeAroundLagos ()
Zolang de voorwaarde waar is, wordt de code binnen de accolades of de body van de lus uitgevoerd. Als de voorwaarde onwaar is, wordt de code niet uitgevoerd. In ons voorbeeld hierboven, als de brandstofvariabele minder dan 5 liter wordt, wordt de conditie onwaar en eindigt de lus. Met andere woorden, driveMeAroundLagos ()
methode-uitvoering stopt.
doen terwijl
LusKotlin heeft ook de doen terwijl
loop-constructie.
voer hier code uit terwijl (voorwaarde)
Dit is vergelijkbaar met de terwijl
uitspraak. In de while-lus test het programma de lustoestand aan het begin van de lus voordat het lichaam van de lus wordt uitgevoerd. Als de voorwaarde onwaar is, wordt de instantie niet uitgevoerd. Maar de doen terwijl
lus test de conditie na het uitvoeren van de body van de lus. Dit betekent dat het lichaam minstens één keer wordt uitgevoerd.
voor
LusEEN voor
loop is een herhalingstekst die ons in staat stelt om objecten te herhalen terwijl een gegeven voorwaarde waar is.
for (value in range) // Code uitvoeren
In Kotlin, de voor
lusconstruct werkt met iteratie over bereiken, verzamelingen of andere iterables (ik zal hier meer over in de volgende post uitleggen). Voor lussen werkt het samen met in
operator, die wordt gebruikt om vast te stellen of een waarde in een bepaald bereik aanwezig is.
for (a in 1 ... 5) print ("$ a") // zal afdrukken 1 2 3 4 5
In de bovenstaande code itereren we door een gesloten bereik van 1 tot 5 en drukken we elke waarde in het bereik uit.
We kunnen de gebruiken withIndex ()
functie of de index
eigenschap op een array om een array te itereren waarbij we de index voor elk element nodig hebben.
withIndex ()
FunctieWe kunnen een array doorlopen om toegang te krijgen tot de index van elk element door het te gebruiken withIndex ()
functie op de array, omdat de withIndex ()
functie retourneert een iterable van IndexedValue
type voor elk element. Hierdoor hebben we toegang tot zowel de index als de waarde voor elk element ervan.
val numbersArray = intArrayOf (1,2,3,4,5) for ((index, value) in numbersArray.withIndex ()) print ("$ indexindexwaarde is $ waarde \ n")
De bovenstaande code zal het onderstaande resultaat afdrukken:
0 indexwaarde is 1 1 indexwaarde is 2 2 indexwaarde is 3 3 indexwaarde is 4 4 indexwaarde is 5
index
EigendomBovendien kunnen we de index
eigenschap op de array. Hierdoor wordt alleen het bereik van geldige indices voor de array geretourneerd.
val numbers1 = intArrayOf (1,2,3,4,5) for (index in numbers1.indices) print ("$ indexindexwaarde is $ numbers1 [index] \ n")
De bovenstaande code zal hetzelfde resultaat opleveren als het vorige voorbeeld. U kunt hier ook zien dat we de index kunnen gebruiken om toegang te krijgen tot een arrayelement, vergelijkbaar met andere programmeertalen zoals Java.
Kotlin heeft drie soorten conditie-uitspraken: de als
, als ... anders
, en wanneer
statements.
als
UitspraakEen als
statement voert een code uit als een voorwaarde waar is, of slaat het gewoon over als de voorwaarde onwaar is. Niets bijzonders hier: als
statements werken op dezelfde manier als in de meeste andere programmeertalen, inclusief Java.
val nummer = 20 if (nummer% 2 == 0) print ("$ nummer is deelbaar door 2") // 20 is deelbaar door 2
We kunnen ook controleren of een variabele van een bepaald type is met behulp van de is
trefwoord.
if (nummer is Int) print ("$ getal is een geheel getal")
als ... anders
UitspraakDe als ... anders
voert één actie uit als de voorwaarde waar is en voert een andere actie uit als de voorwaarde onwaar is.
val nummer = 13 if (nummer% 2 == 0) print ("$ nummer is deelbaar door 2") else print ("$ nummer is niet deelbaar door 2") // 13 is niet deelbaar door 2
Een belangrijk kenmerk dat de als ... anders
verklaring in Kotlin uit andere programmeertalen zoals Java is de mogelijkheid om een variabele toe te kennen aan de geretourneerde waarde van de als ... anders
uitspraak. Dit is mogelijk omdat een als ... anders
verklaring kan niet alleen als een verklaring worden gebruikt, maar ook als een uitdrukking in Kotlin.
val nummer = 13 val result = if (nummer% 2 == 0) "$ nummer is deelbaar door 2" else "$ nummer is niet deelbaar door 2" print (resultaat) // 13 is niet deelbaar door 2
In de bovenstaande code hebben we de resultaat
variabele met een Draad
object op basis van de staat van de als ... anders
uitspraak. Houd er rekening mee dat hierdoor alleen de laatste instructie in een bepaald voorwaardenblok wordt geretourneerd en ook dat u geen gebruik kunt maken van een als
zonder een anders
als een uitdrukking.
val result = if (number% 2 == 0) "Deelbaar door 2" "Number is $ number" // alleen deze string wordt geretourneerd indien uitgevoerd else "Niet deelbaar door 2" "Number is $ number"
wanneer
UitdrukkingKotlin introduceerde de wanneer
bouwen als een vervanging voor het vertrouwde schakelaar
verklaring die we in verschillende programmeertalen hebben, zoals C ++, Java, enzovoort. wanneer
is beknopter en heeft meer krachtige functies dan de schakelaar
verklaring die u wellicht kent.
De wanneer
statement voert verschillende acties uit op basis van de mogelijke waarden van een constante van het type Int
, Draad
, Byte
, kort
, of een ander object.
fun guessTheNumber (getal: Int) when (number) 1 -> println ("number is 1") 2 -> println ("number is 2") 3 -> println ("number is 3") else -> println ("nummer is geen 1, 2 of 3")
In de bovenstaande code hebben we de functie doorgegeven guessTheNumber ()
een aantal-parameter (we zullen functies in Kotlin in een later bericht bespreken). De wanneer
expression controleert vervolgens of een van de branches overeenkomt met de waarde van aantal
en voert dan de actie op die tak uit. Als geen van de takken een match was, de anders
tak wordt uitgevoerd.
Een andere variant van de wanneer
expressie vereist geen argument, zoals in het onderstaande voorbeeld.
plezier guessTheNumber (getal: Int) wanneer nummer == 1 -> println ("number is 1") number == 2 -> println ("number is 2") number == 3 -> println ("number is 3 ") anders -> println (" nummer is geen 1, 2 of 3 ")
Als we meer dan één actie op een filiaal willen uitvoeren, moeten we de acties in accolades nemen .
val nummer = 2 wanneer (nummer) 1 -> println ("nummer is 1") 2 -> // blok code uitgevoerd println ("nummer is 2") println ("het is een even getal") 3 -> println ("nummer is 3")
Bovendien kunnen we testwaarden combineren in een enkele tak.
val nummer = 2 wanneer (nummer) 1, 2 -> println ("nummer is ofwel 1 of 2") // nummer is ofwel 1 of 2 3 -> println ("nummer is 3")
Hier wordt de eerste tak uitgevoerd omdat we testen op een waarde van 1 of 2.
In deze zelfstudie hebt u geleerd over nullability, loops en conditions in de Kotlin-programmeertaal. In de volgende zelfstudie in de Kotlin From Scratch-serie leert u meer over de bereik- en verzamelings-API in Kotlin. Tot ziens!
Voor meer informatie over de Kotlin-taal, raad ik aan de Kotlin-documentatie te bezoeken. Of bekijk enkele van onze andere Kotlin-tutorials hier op Envato Tuts+!