1. 概要
簡単に言えば、Kotlinには三元演算子はありません。 ただし、ifおよびwhen式を使用すると、このギャップを埋めるのに役立ちます。
このチュートリアルでは、三項演算子を模倣するいくつかの異なる方法を検討します。
2. ifおよびwhen式
他の言語とは異なり、 Kotlinにある場合とそのときは式です。 このような式の結果を変数に割り当てることができます 。
この事実を使用して、ifとwhenの両方を独自の方法で三項演算子の代わりに使用できます。
2.1. if-elseを使用する
if式を使用して三項演算子を模倣する方法を見てみましょう。
val result = if (a) "yes" else "no"
上記の式で、aがtrueに設定されている場合、result変数はyesに設定されます。 それ以外の場合は、noに設定されます。
結果のタイプは右側の式に依存することに注意してください。 通常、タイプはAnyです。 たとえば、右側にブールタイプがある場合、結果はブールにもなります。
val result: Boolean = if (a == b) true else false
2.2. whenを使用する
when 式を使用して、疑似3項演算子を作成することもできます。
val result = when(a) {
true -> "yes"
false -> "no"
}
コードはシンプルでわかりやすく、読みやすいです。 aがtrueの場合、resultをyesに割り当てます。 それ以外の場合は、noに割り当てます。
2.3. エルビス演算子
場合によっては、 if 式を使用して、 null でない場合に値を抽出したり、nullの場合にデフォルト値を返したりします。
val a: String? = null
val result = if (a != null) a else "Default"
when式でも同じことができます。
val result = when(a) {
null -> "Default"
else -> a
}
これは非常に一般的なパターンであるため、Kotlinには特別な演算子があります。
val result = a ?: "Default"
The ?: として知られていますエルビス演算子 。 nullでない場合は、オペランドを返します。 それ以外の場合は、?:演算子の右側に指定されたデフォルト値を返します。 。
2.4. DSL
三項演算子を模倣したDSLを作成したいという誘惑は確かにあります。 ただし、Kotlinの言語制限は厳しすぎて、従来の3値構文を100% r生成できません。
そのため、この誘惑を避けて、前述の解決策の1つを使用してみましょう。
3. 結論
Kotlinには三項演算子がありませんが、ifおよびwhenといういくつかの選択肢があります。 以前に見たように、これらは構文糖衣ではなく、完全な表現です。
いつものように、コードはGitHubで入手できます。