[解決済み] 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
関連
-
[解決済み] Kotlinは「値渡し」なのか「参照渡し」なのか?
-
[解決済み] lateinit "変数が初期化されたかどうかを確認する方法は?
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み] by lazy" と "lateinit" を使ったプロパティの初期化
-
[解決済み] Kotlinのvarとvalの違いは何ですか?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】Kotlinのダブルバング(!)演算子とは?
-
[解決済み] Kotlinで、nullableな値を扱う慣用的な方法、参照または変換する方法は何ですか?
-
[解決済み] Kotlinの複数変数let
-
[解決済み] '変数'が変更可能なプロパティであるため、'型'へのスマートキャストは不可能である。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Swiftの「if let」文がKotlinで同等であること
-
[解決済み] Kotlinの静的メソッドと変数
-
[解決済み] Kotlinは「値渡し」なのか「参照渡し」なのか?
-
[解決済み] Kotlinのメンバー宣言に期待する
-
[解決済み] lateinit "変数が初期化されたかどうかを確認する方法は?
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み】Kotlin:関数を他の関数にパラメータとして渡すには?
-
[解決済み] Kotlinでログを取るための慣用的な方法
-
[解決済み] なぜKotlinではJavaの静的フィールドの代わりのようなものとして「コンパニオンオブジェクト」を使うのか?
-
[解決済み] KotlinのArrayList<String>()とmutableListOf<String>()の相違点