Kotlin
Voorwaardelijke stellingen
Zoeken…
Opmerkingen
In tegenstelling tot Java's switch
, de when
statement heeft geen fall-through gedrag. Dit betekent dat als een vertakking overeenkomt, de besturingsstroom terugkeert na uitvoering en er geen break
statement nodig is. Als je de bahaviors wilt combineren voor meerdere argumenten, kun je meerdere argumenten schrijven gescheiden door komma's:
when (x) {
"foo", "bar" -> println("either foo or bar")
else -> println("didn't match anything")
}
Standaard if-statement
val str = "Hello!"
if (str.length == 0) {
print("The string is empty!")
} else if (str.length > 5) {
print("The string is short!")
} else {
print("The string is long!")
}
De else-branches zijn optioneel in normale if-statements.
If-statement als uitdrukking
If-statements kunnen uitdrukkingen zijn:
val str = if (condition) "Condition met!" else "Condition not met!"
Merk op dat de else
-tranch niet optioneel is als de if
-verklaring als een uitdrukking wordt gebruikt.
Dit kan ook worden gedaan met een variant met meerdere regels met accolades en meerdere else if
instructies.
val str = if (condition1){
"Condition1 met!"
} else if (condition2) {
"Condition2 met!"
} else {
"Conditions not met!"
}
TIP: Kotlin kan het type variabele voor u afleiden, maar als u zeker wilt zijn van het type, annoteer het dan gewoon op de variabele zoals:
val str: String =
dit zal het type versterken en het gemakkelijker leesbaar maken.
When-statement in plaats van if-else-if ketens
De when-instructie is een alternatief voor een if-instructie met meerdere else-if-branches:
when {
str.length == 0 -> print("The string is empty!")
str.length > 5 -> print("The string is short!")
else -> print("The string is long!")
}
Dezelfde code geschreven met een if-else-if- keten:
if (str.length == 0) {
print("The string is empty!")
} else if (str.length > 5) {
print("The string is short!")
} else {
print("The string is long!")
}
Net als bij de if-instructie is de else-branch optioneel en kun je zoveel of zo weinig branches toevoegen als je wilt. Je kunt ook multiline-vertakkingen hebben:
when {
condition -> {
doSomething()
doSomeMore()
}
else -> doSomethingElse()
}
When-statement argument matching
Wanneer gegeven argument, de when
-statement wedstrijden het argument tegen de takken na elkaar. Het matchen wordt gedaan met behulp van de operator ==
die null-controles uitvoert en de operanden vergelijkt met de functie is equals
. De eerste overeenkomende wordt uitgevoerd.
when (x) {
"English" -> print("How are you?")
"German" -> print("Wie geht es dir?")
else -> print("I don't know that language yet :(")
}
De instructie When kent ook enkele meer geavanceerde zoekopties:
val names = listOf("John", "Sarah", "Tim", "Maggie")
when (x) {
in names -> print("I know that name!")
!in 1..10 -> print("Argument was not in the range from 1 to 10")
is String -> print(x.length) // Due to smart casting, you can use String-functions here
}
When-statement als uitdrukking
Alsof, wanneer ook kan worden gebruikt als een uitdrukking:
val greeting = when (x) {
"English" -> "How are you?"
"German" -> "Wie geht es dir?"
else -> "I don't know that language yet :("
}
print(greeting)
Om als uitdrukking te worden gebruikt, moet de wanneer-instructie uitputtend zijn, dwz ofwel een andere tak hebben of alle mogelijkheden met de takken op een andere manier dekken.
When-statement met enums
when
kan worden gebruikt om enum
te matchen:
enum class Day {
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
fun doOnDay(day: Day) {
when(day) {
Day.Sunday -> // Do something
Day.Monday, Day.Tuesday -> // Do other thing
Day.Wednesday -> // ...
Day.Thursday -> // ...
Day.Friday -> // ...
Day.Saturday -> // ...
}
}
Zoals u kunt zien in de tweede Tuedsay
( Monday
en Tuedsay
), is het ook mogelijk om twee of meer enum
te combineren.
Als uw zaken niet volledig zijn, geeft het compileren een foutmelding. U kunt else
gebruiken om standaardgevallen te behandelen:
fun doOnDay(day: Day) {
when(day) {
Day.Monday -> // Work
Day.Tuesday -> // Work hard
Day.Wednesday -> // ...
Day.Thursday -> //
Day.Friday -> //
else -> // Party on weekend
}
}
Hoewel hetzelfde kan worden gedaan met behulp van if-then-else
constructie, when
zorgt voor ontbrekende enum
en het natuurlijker maakt.
Bekijk hier voor meer informatie over Kotlin enum