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



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow