Sök…


Anmärkningar

I motsats till Java: s switch har when uttalandet inget genomgående beteende. Detta innebär att om en gren matchas återgår styrflödet efter dess utförande och inget break krävs. Om du vill kombinera bah Fräser för flera argument kan du skriva flera argument åtskilda med komma:

when (x) {
    "foo", "bar" -> println("either foo or bar")
    else -> println("didn't match anything")
}

Standard 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 andra grenarna är valfria i vanliga if-uttalanden.

If-uttalande som ett uttryck

If-uttalanden kan vara uttryck:

val str = if (condition) "Condition met!" else "Condition not met!"

Observera att den else -grenen inte är valfri om if -statementet används som ett uttryck.

Detta kan också göras med en multilinjevariant med lockiga parenteser och flera else if uttalanden.

val str = if (condition1){
    "Condition1 met!" 
   } else if (condition2) {
    "Condition2 met!" 
   } else {
    "Conditions not met!"
   }

TIPS: Kotlin kan dra slutsatsen om variabeln för dig men om du vill vara säker på typen märker du bara den på variabeln som: val str: String = detta kommer att tvinga fram typen och kommer att göra det lättare att läsa.

När-uttalande i stället för om-annars-om kedjor

När-uttalandet är ett alternativ till ett if-uttalande med flera andra-om-grenar:

when {
    str.length == 0 -> print("The string is empty!")
    str.length > 5  -> print("The string is short!")
    else            -> print("The string is long!")
}

Samma kod skriven med en if-else-if- kedja:

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!")
}

Precis som med if-uttalandet är den andra grenen valfri, och du kan lägga till så många eller så få grenar du vill. Du kan också ha multiline-grenar:

when {
    condition -> {
        doSomething()
        doSomeMore()
    }
    else -> doSomethingElse()
}

När-uttalande argument matchning

När ett argument ges, matchar when -statementet argumentet mot grenarna i följd. Matchningen görs med operatören == som utför nollkontroller och jämför operanderna med funktionen equals . Den första matchande exekveras.

when (x) {
    "English" -> print("How are you?")
    "German" -> print("Wie geht es dir?")
    else -> print("I don't know that language yet :(")
}

När uttalandet känner också till några mer avancerade matchningsalternativ:

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
}

När-uttalande som uttryck

Som om, när kan också användas som ett uttryck:

val greeting = when (x) {
    "English" -> "How are you?"
    "German" -> "Wie geht es dir?"
    else -> "I don't know that language yet :("
}
print(greeting)

För att användas som ett uttryck måste när-uttalandet vara uttömmande, dvs antingen ha en annan gren eller täcka alla möjligheter med grenarna på ett annat sätt.

När-uttalande med enums

when kan användas för att matcha enum :

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 ->   // ...
    }
}

Som du kan se i andra Tuedsay ( Monday och Tuedsay ) är det också möjligt att kombinera två eller flera enum .

Om dina ärenden inte är uttömmande visar kompilering ett fel. Du kan använda else att hantera standardfall:

fun doOnDay(day: Day) {
    when(day) {
        Day.Monday ->     // Work
        Day.Tuesday ->    // Work hard
        Day.Wednesday ->  // ...
        Day.Thursday ->   //
        Day.Friday ->     //
        else ->           // Party on weekend
    }
} 

Men detsamma kan göras med if-then-else konstruktion, when tar hand om saknade enum och gör det mer naturligt.

Kolla här för mer information om kotlin enum



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow