サーチ…


備考

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番目のケースライン( MondayTuedsay 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詳細はこちらをご覧ください



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow