web-dev-qa-db-ja.com

オブジェクトがnullの場合にコードを実行する方法は?

Kotlinでは、次のようにオブジェクトがnullでない場合、コードを実行できます。

data?.let {
    ... // execute this block if not null
}

しかし、オブジェクトがnullの場合、どのようにコードのブロックを実行できますか?

27
Toni Joe

通常のifを使用するだけです:

if (data == null) {
  // Do something
}
14
Pixel Elephant

elvis演算子 を使用して、run { ... }で別のコードブロックを評価できます。

data?.let {
    // execute this block if not null
} ?: run {
    // execute this block if null
}

しかし、これは単純なif-_elseステートメントほど読みにくいようです。

また、次のQ&Aが役立つ場合があります。

88
hotkey

次のような挿入関数を作成できます。

infix fun Any?.ifNull(block: () -> Unit) { 
  if (this == null) block()
}

次に、これを行うことができます:

data ifNull {
  // Do something
}
24

Elvis演算子を使用した簡潔な構文を次に示します。 Elvis演算子は、左側がnullと評価された場合にのみ右側を実行することを思い出してください。

data ?: doSomething()
11
M. Palsich

以下のコードを使用できます

_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
_
1
iroiroys