サーチ…
備考
Javaのswitch
とは対照的に、 when
ステートメントにはフォールスルー動作がありません。つまり、分岐が一致した場合、制御フローは実行後に戻り、 break
文は必要ありません。 bahaviorsを複数の引数に結合したい場合は、複数の引数をコンマで区切って書くことができます:
when (x) {
"foo", "bar" -> println("either foo or bar")
else -> println("didn't match anything")
}
標準のif文
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!")
}
else-branchesは通常のif文ではオプションです。
式としてのIf文
if文を式にすることができます:
val str = if (condition) "Condition met!" else "Condition not met!"
ことに注意してくださいelse
場合-branchはオプションではありませんif
-statementが表現として使用されています。
これは中括弧と複数のelse if
ステートメントを含む複数行の変形でも実行できます。
val str = if (condition1){
"Condition1 met!"
} else if (condition2) {
"Condition2 met!"
} else {
"Conditions not met!"
}
ヒント:Kotlinは変数の型を推論することができますが、変数の型に注釈を付けるだけの場合は、
val str: String =
型を適用して読みやすくします。
if-else-ifチェーンの代わりにwhen-statement
when文は、複数のelse ifブランチを持つif文の代替です。
when {
str.length == 0 -> print("The string is empty!")
str.length > 5 -> print("The string is short!")
else -> print("The string is long!")
}
if-else-ifチェーンを使って書かれた同じコード:
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!")
}
if文の場合と同様に、elseブランチはオプションであり、好きなだけ多くのブランチまたはいくつかのブランチを追加できます。また、マルチラインブランチを使用することもできます。
when {
condition -> {
doSomething()
doSomeMore()
}
else -> doSomethingElse()
}
when-statement引数の一致
引数が与えられると、 when
-statementは引数を順番に分岐に照合します。照合は、 ==
演算子を使用して行われます。演算子は、NULLチェックを実行し、 equals
関数を使用してオペランドを比較します。最初に一致するものが実行されます。
when (x) {
"English" -> print("How are you?")
"German" -> print("Wie geht es dir?")
else -> print("I don't know that language yet :(")
}
whenステートメントにはさらに高度なマッチングオプションがいくつかあります。
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-文としての式
ifのように、whenを式として使用することもできます:
val greeting = when (x) {
"English" -> "How are you?"
"German" -> "Wie geht es dir?"
else -> "I don't know that language yet :("
}
print(greeting)
式として使用するには、when文は完全なものでなければなりません。つまり、elseブランチを持つか、ブランチを持つ別の方法ですべての可能性をカバーします。
when-列挙型のステートメント
when
一致させるために使用することができます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 -> // ...
}
}
2番目のケースライン( Monday
とTuedsay
2時)に見られるように、2つ以上のenum
値を組み合わせることもできます。
あなたのケースが網羅的でない場合、コンパイルはエラーを表示します。 else
を使用してデフォルトのケースを処理できます:
fun doOnDay(day: Day) {
when(day) {
Day.Monday -> // Work
Day.Tuesday -> // Work hard
Day.Wednesday -> // ...
Day.Thursday -> //
Day.Friday -> //
else -> // Party on weekend
}
}
同じを使用して行うことができますがif-then-else
構築、 when
欠落しているの世話をenum
値を、それがより自然になります。
kotlin enum
詳細はこちらをご覧ください