Kotlin From Scratch Nullability, Loops, and Conditions

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.

1. Nullability

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. 

De Safe Call Operator: ?.

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

De Elvis-exploitant: ?:

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.

2. Lussen

Kotlin heeft terwijl, do-while en voor loops. 

De terwijl Lus

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

De doen terwijl Lus

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

De voor Lus

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

Itereren over een index Array

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.

De ... gebruiken withIndex () Functie

We 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

De ... gebruiken index Eigendom

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

3. Voorwaarden

Kotlin heeft drie soorten conditie-uitspraken: de als, als ... anders, en wanneer statements. 

De als Uitspraak

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

De als ... anders Uitspraak

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

De wanneer Uitdrukking

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

Conclusie

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