1. ホーム
  2. kotlin

[解決済み] Kotlinの「?:」は何をするのか?(エルビス演算子)

2022-03-03 10:53:20

質問

がわかりません。 ?: は、例えば次のような場合に使用します。

val list = mutableList ?: mutableListOf() 

そして、なぜこのように修正することができるのか

val list = if (mutableList != null) mutableList else mutableListOf()

解決方法は?

TL;DR: 結果のオブジェクト参照[最初のオペランド]が null が返されます。そうでない場合は、第二オペランドの値(これは null が返される。 さらに、演算子は、NULLが返された場合、例外を投げることができます。


その エルビス演算子 は、Kotlinだけでなく、GroovyやC#など、多くのプログラミング言語に含まれている。 私は ウィキペディア の定義はかなり正確です。

<ブロッククオート

ある種のコンピュータ・プログラミング言語では エルビス演算子 ?: 二項演算子 である場合、その最初のオペランドを返します。 true それ以外の場合は、第2オペランドを評価し、返します。これは 三項条件演算子の変種 , ? : これらの言語 (および他の多くの言語) で見られる Elvis 演算子は 三項演算子で第二オペランドが省略されたもの .

特にKotlinの場合は以下のようになります。

コンピュータ・プログラミング言語によっては、この演算子のセマンティクスが異なる場合があります。 最初のオペランドはブール値でなければならない代わりに、オブジェクトへの参照でなければなりません。 . もし、結果のオブジェクト参照が null が返される。そうでない場合は、第二オペランドの値(これは null が返されます。2 番目のオペランドが NULL の場合、演算子は例外を投げることも可能です。

一例です。

x ?: y // yields `x` if `x` is not null, `y` otherwise.
x ?: throw SomeException() // yields `x` if `x` is not null, throws SomeException otherwise