Kotlinでは、次のようにオブジェクトがnullでない場合、コードを実行できます。
data?.let {
... // execute this block if not null
}
しかし、オブジェクトがnullの場合、どのようにコードのブロックを実行できますか?
通常のif
を使用するだけです:
if (data == null) {
// Do something
}
elvis演算子 を使用して、run { ... }
で別のコードブロックを評価できます。
data?.let {
// execute this block if not null
} ?: run {
// execute this block if null
}
しかし、これは単純なif
-_else
ステートメントほど読みにくいようです。
また、次のQ&Aが役立つ場合があります。
次のような挿入関数を作成できます。
infix fun Any?.ifNull(block: () -> Unit) {
if (this == null) block()
}
次に、これを行うことができます:
data ifNull {
// Do something
}
Elvis演算子を使用した簡潔な構文を次に示します。 Elvis演算子は、左側がnullと評価された場合にのみ右側を実行することを思い出してください。
data ?: doSomething()
以下のコードを使用できます
_myNullable?.let {
} ?: {
// do something
}()
_
また、fun()
を省略できます
_myNullable?.let {
} ?: fun() {
// do something
}()
_
または、_()
_の代わりにinvoke()
を呼び出すことができます
_myNullable?.let {
} ?: fun() {
// do something
}.invoke()
_
戻り値は次のように異なることに注意してください。
_val res0 = myNullable?.let {
} ?: () {
}()
val res1 = myNullable?.let {
} ?: fun() {
"result"
}()
val res2 = myNullable?.let {
} ?: () {
"result"
}()
println("res0:$res0")
println("res1:$res1")
println("res2:$res2")
_
結果:
_res0:kotlin.Unit // () {} with empty
res1:kotlin.Unit // fun() {}
res2:result // () {} with return
_