Si j'ai un nullable Boolean b
, je peux faire la comparaison suivante en Java:
Boolean b = ...;
if (b != null && b) {
/* Do something */
} else {
/* Do something else */
}
Dans Kotlin, je peux réaliser la même chose en utilisant l' !!
opérateur:
val b: Boolean? = ...
if (b != null && b!!) {
/* Do something */
} else {
/* Do something else */
}
Cependant, l'utilisation de !!
me semble un peu sommaire, contournant le système de sécurité nul.
Y a-t-il une approche plus élégante pour cela?
Edit Il semble que j'ai un peu trop simplifié. Pour les variables locales, comme le montre Banthar , cela fonctionne. Cependant, mon booléen b
est en fait une "propriété avec un champ de sauvegarde" (je ne suis pas encore vraiment au courant de ce que cela impose). Voici le résultat:
!!b
et pas simplementb
? (Je ne connais pas très bien kotlin, juste des curiosités)b
peut êtrenull
et l'une des fonctionnalités de Kotlin est Null Safety , qui donne des erreurs de compilation lors de la tentative d'évaluation de références Nullable. Ainsi, l'utilisation de plainb
donne une erreur de compilation :)b != nil
attraperez pas avant de vérifier le bon côté?val r = b?doSomething() ?: doSomethingElse()
devrait fonctionner.Réponses:
Vous pouvez comparer avec booléenne annulable
true
,false
ou ennull
utilisant l' opérateur d'égalité:la source
!
true
,false
ounull
. Ensuite, en faisant,if (b != true)
vous savez seulement que b n'est pas vrai, mais vous ne savez rien surfalse
ounull
if (b != true) // b is null or false
eg3.if (b == false) // b is false
Si vous voulez vérifier proprement si un
Boolean?
esttrue
oufalse
vous pouvez faire:Si vous voulez vérifier si c'est,
null
vous pouvez ajouter cela (ouelse
) en tant que valeur dans lewhen
:la source
Kotlin analysera statiquement vos vérifications nulles. C'est bon:
Même si cela échoue avec une erreur de type:
Pour plus d'informations, voir: http://kotlinlang.org/docs/reference/null-safety.html
Vous pouvez également utiliser un "opérateur de fusion nul" (qui fonctionnera pour les variables mutables):
la source
var
?) ... s'il s'agit d'un local,var
le compilateur peut toujours autoriser la conversion sécurisée. Pour des cas plus spéciaux, lisez stackoverflow.com/questions/34498562/…val booleanVal = nullableProducer?.produceVal() ?: false; if (booleanVal) {}
D'après ce que j'ai vu le booléen? est le résultat d'une méthode qui retourne Boolean sur un objet qui est nullable
La solution que j'ai utilisée consiste à utiliser la
let
fonction pour supprimer la possible valeur nulle renvoyée comme suitla source
if
block parperson?.isHome() == true
.Dans Kotlin, vous pouvez faire comme ceci:
la source
b != null && b == true
est le même queb == true
.tout d'abord, ajoutez la fonction en ligne personnalisée ci-dessous:
alors vous pouvez écrire un code comme celui-ci:
la source
Pour Kotlin, ce que j'utilise normalement est
cela ne fonctionnerait que lorsque la propriété est vraie et que l'objet n'est pas nul. Pour l'inverse:
la source
Utilisons une
if-else
instruction avec unElvis Operator
:la source
Il est assez facile d'ajouter une fonction d'extension si cela vous aide.
la source
la source
Vous pouvez faire avec un opérateur sûr "let"
la source