1. 概要

簡単に言えば、Kotlinには三元演算子はありません。 ただし、ifおよびwhen式を使用すると、このギャップを埋めるのに役立ちます。

このチュートリアルでは、三項演算子を模倣するいくつかの異なる方法を検討します。

2. ifおよびwhen

他の言語とは異なり、 Kotlinにある場合とそのときは式です。 このような式の結果を変数に割り当てることができます

この事実を使用して、ifwhenの両方を独自の方法で三項演算子の代わりに使用できます。

2.1. if-elseを使用する

if式を使用して三項演算子を模倣する方法を見てみましょう。

val result = if (a) "yes" else "no"

上記の式で、atrueに設定されている場合、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"
}

コードはシンプルでわかりやすく、読みやすいです。 atrueの場合、resultyesに割り当てます。 それ以外の場合は、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で入手できます。