Dans Kotlin, je peux exécuter du code si un objet n'est pas nul comme ceci:
data?.let {
... // execute this block if not null
}
mais comment puis-je exécuter un bloc de code si l'objet est nul?
Utilisez simplement un if
normal:
if (data == null) {
// Do something
}
Vous pouvez utiliser elvis opérateur et évaluer un autre bloc de code avec run { ... }
:
data?.let {
// execute this block if not null
} ?: run {
// execute this block if null
}
Mais cela ne semble pas aussi lisible qu'une simple instruction if
-else
.
En outre, vous pourriez trouver ces questions/réponses utiles:
Vous pouvez créer une fonction d'infixe comme celle-ci:
infix fun Any?.ifNull(block: () -> Unit) {
if (this == null) block()
}
Ensuite, vous pouvez le faire:
data ifNull {
// Do something
}
Voici une syntaxe concise utilisant l'opérateur Elvis. Rappelez-vous que l'opérateur Elvis exécute uniquement le côté droit si le côté gauche est évalué à null.
data ?: doSomething()
Vous pouvez utiliser le code ci-dessous
myNullable?.let {
} ?: {
// do something
}()
vous pouvez également omettre fun()
myNullable?.let {
} ?: fun() {
// do something
}()
ou vous pouvez appeler invoke()
au lieu de ()
myNullable?.let {
} ?: fun() {
// do something
}.invoke()
Notez que le retour de valeur diffère comme ci-dessous.
val res0 = myNullable?.let {
} ?: () {
}()
val res1 = myNullable?.let {
} ?: fun() {
"result"
}()
val res2 = myNullable?.let {
} ?: () {
"result"
}()
println("res0:$res0")
println("res1:$res1")
println("res2:$res2")
RÉSULTAT:
res0:kotlin.Unit // () {} with empty
res1:kotlin.Unit // fun() {}
res2:result // () {} with return