Kotlin
Villkorliga uttalanden
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