Si tengo un nulo Boolean b
, puedo hacer la siguiente comparación en Java:
Boolean b = ...;
if (b != null && b) {
/* Do something */
} else {
/* Do something else */
}
En Kotlin, puedo lograr lo mismo usando el !!
operador:
val b: Boolean? = ...
if (b != null && b!!) {
/* Do something */
} else {
/* Do something else */
}
Sin embargo, el uso de me !!
parece un poco incompleto, eludiendo el sistema de seguridad nulo.
¿Hay un enfoque más elegante para esto?
Editar Parece que me sobreexpliqué un poco. Para las variables locales, como muestra Banthar , funciona. Sin embargo, mi booleano b
es en realidad una "propiedad con un campo de respaldo" (todavía no estoy al tanto de lo que esto impone). Este es el resultado:
!!b
y no simplementeb
? (No estoy tan familiarizado con Kotlin, solo curiosidades)b
puede sernull
y una de las características de Kotlin es Null Safety , que proporciona errores de compilación al intentar evaluar referencias anulables. Por lo tanto, usar plainb
da un error de compilación :)b != nil
captará eso antes de comprobar el lado derecho?val r = b?doSomething() ?: doSomethingElse()
debería funcionar.Respuestas:
Puede comparar booleanos anulables con
true
,false
onull
usando el operador de igualdad:fuente
!
true
,false
onull
. Entonces, cuando lo hacesif (b != true)
, solo sabes que b no es cierto, pero no sabes nada sobrefalse
onull
if (b != true) // b is null or false
eg3.if (b == false) // b is false
Si desea verificar limpiamente si
Boolean?
estrue
ofalse
puede hacer:Si desea verificar si es así,
null
puede agregar eso (oelse
) como un valor enwhen
:fuente
Kotlin analizará estáticamente sus cheques nulos. Esto esta bien:
Aunque esto falla con el error de tipo:
Para obtener más información, consulte: http://kotlinlang.org/docs/reference/null-safety.html
También puede usar el "operador de fusión nula" (que funcionará para variables mutables):
fuente
var
?) ... si es un local,var
entonces el compilador aún puede permitir el lanzamiento seguro. Para casos más especiales, lea stackoverflow.com/questions/34498562/…val booleanVal = nullableProducer?.produceVal() ?: false; if (booleanVal) {}
Por lo que he visto el booleano? es el resultado de un método que devuelve un valor booleano en un objeto que puede anularse
La solución que he estado usando es usar la
let
función para eliminar el posible valor nulo devuelto de esta manerafuente
if
block byperson?.isHome() == true
.En Kotlin, puedes hacer así:
fuente
b != null && b == true
es el mismo queb == true
.primero, agregue la función en línea personalizada a continuación:
entonces puedes escribir código como este:
fuente
Para Kotlin lo que normalmente uso es
esto solo funcionaría cuando la propiedad sea verdadera y el objeto no sea nulo. Por el reverso:
fuente
Usemos una
if-else
declaración con unElvis Operator
:fuente
Es bastante fácil agregar una función de extensión si eso te ayuda.
fuente
fuente
Puede hacerlo con el operador seguro "let"
fuente