gratis descargar compiler kotlin null

descargar - kotlin vs scala



El uso de booleano? en la expresión if (8)

Si tengo un Boolean b anulable, 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 vago, eludiendo el sistema de seguridad nulo.

¿Hay un enfoque más elegante para esto?

Editar Parece que exageré un poco. Para las variables locales, como muestra Banthar , funciona. Sin embargo, mi Boolean 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:


En Kotlin, puedes hacer así:

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


Es bastante fácil agregar una función de extensión si eso te ayuda.

fun Boolean?.orDefault(default: Boolean = false): Boolean { if (this == null) return default return this } var x: Boolean? = null if(x.orDefault()) { .. }


Kotlin analizará estáticamente sus cheques nulos. Esto esta bien:

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

Aunque esto falla con el error de tipo:

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

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):

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


Para Kotlin, lo que normalmente uso es if (object?.booleanProperty ==true) { //do stuff } esto solo funcionaría cuando la propiedad sea verdadera y el objeto no sea nulo. Para el reverso: if (!object?booleanProperty !=true) { //do Stuff}


Por lo que he visto el booleano? es el resultado de un método que devuelve un valor booleano en un objeto que puede contener nulos

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

La solución que he estado usando es usar la función let para eliminar el posible valor nulo devuelto de esta manera

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


Puede comparar un booleano anulable con true , false o null utilizando el operador de igualdad:

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


Si quieres comprobar limpiamente si un Boolean? es true o false puedes hacer:

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

Si desea verificar si es null , puede agregar eso (o else ) como un valor en el when :

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


Usemos una declaración if-else con un Elvis Operator :

val a: Boolean? val b: Boolean? a = true b = null if (a != null ?: b) { println("One of them isn''t nullable...") } else { println("Both are nullables!") }

// Resultado: "Uno de ellos no es anulable ..."

a = null b = null if (a != null ?: b) { println("One of them isn''t nullable...") } else { println("Both are nullables!") }

// Resultado: "¡Ambos son anulables!"