Utilisation de booléen? dans l’expression si

Si j’ai un Boolean b nullable, je peux faire la comparaison suivante en Java:

 Boolean b = ...; if (b != null && b) { /* Do something */ } else { /* Do something else */ } 

En Kotlin, je peux réaliser la même chose en utilisant le !! opérateur:

 val b: Boolean? = ... if (b != null && b!!) { /* Do something */ } else { /* Do something else */ } 

Cependant, l’utilisation de !! me sent un peu sommaire, contournant le système de sécurité null.

Y a-t-il une approche plus élégante pour cela?


Modifier Il me semble avoir 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 support” (je ne suis pas encore à la hauteur de ce que cela impose). C’est le résultat:

entrer la description de l'image ici

Vous pouvez comparer le booléen nullable à true , false ou null aide de l’opérateur d’égalité:

 var b: Boolean? = null if (b == true) { // b was not null and equal true } 

Kotlin parsingra statiquement vos vérifications nulles. C’est bon:

 val b: Boolean? = null if (b != null && b) { println(b) } 

Même si cela échoue avec l’erreur de type:

 val b: Boolean? = null if (b == null && b) { println(b) } 

Pour plus d’informations: http://kotlinlang.org/docs/reference/null-safety.html

Vous pouvez également utiliser “opérateur de coalescence nulle” (qui fonctionnera pour les variables mutables):

 val b: Boolean? = null if (b ?: false) { println(b) } 

Si vous voulez vérifier correctement si un Boolean? est true ou false vous pouvez le faire:

 when(b) { true -> {} false -> {} } 

Si vous voulez vérifier si elle est null vous pouvez l’append (ou else ) comme valeur dans le cas when :

 when(b) { true -> {} false -> {} null -> {} } when(b) { true -> {} false -> {} else-> {} } 

De ce que j’ai vu le booléen? est le résultat d’une méthode qui retourne Boolean sur un object qui est nullable

 val person: Person? = null .... if(person?.isHome()) { //This won't comstack because the result is Boolean? //Do something } 

La solution que j’ai utilisée est d’utiliser la fonction let pour supprimer la valeur nulle retournée possible comme

 person?.let { if(it.isHome()) { //Do something } } 

Pour Kotlin, ce que j’utilise normalement est if (object?.booleanProperty ==true) { //do stuff } cela ne fonctionnerait que lorsque la propriété est vraie et que l’object n’est pas nul. Pour l’inverse: if (!object?booleanProperty !=true) { //do Stuff}

Dans Kotlin, vous pouvez faire comme ceci:

 val b: Boolean? = true if (b != null && b == true) { // if b is null, this should be null == true /* Do something */ } else { /* Do something else */ }