Translate
domingo, 25 de noviembre de 2018
Luchando contra NullPointerException con Kotlin - parte 2
Esta es la primera parte : https://emanuelpeg.blogspot.com/2018/11/luchando-contra-nullpointerexception.html
Como habíamos dicho Kotlin tienen diferente un montón de operadores para controlar los NullPointerException.
Veamos el operador ?. Un pequeño ejemplo:
val a = "Kotlin"
val b: String? = null
println(b?.length)
println(a?.length)
Esto devuelve b.length si b no es nulo, y nulo de lo contrario, por lo tanto esto retorna un valor de tipo : Int?
Esto es muy practico, ya que nos olvidamos de hacer muchas comprobaciones por ejemplo, si necesito el nombre del profesor del curso que esta haciendo juan :
juan?.curso?.profesor?.nombre
Como no estoy seguro que juan este haciendo un curso y el curso tenga un profesor y el profesor un nombre, uso ?.
Si queremos solo valores no nulos podemos usar let :
val listWithNulls: List<String?> = listOf("Kotlin", null)
for (item in listWithNulls) {
item?.let { println(it) } // prints A and ignores null
}
let realiza la acción si no es nulo.
el operador ?. es útil para la asignación:
person?.department?.head = managersPool.getManager()
Si person o department es nulo no asigna nada.
El operador Elvis nos permite hacer acciones si los campos son nulos, veamos un ejemplo:
fun foo(node: Node): String? {
val parent = node.getParent() ?: return null
val name = node.getName() ?: throw IllegalArgumentException("name expected")
// ...
}
El operador de aserción no-nula (!!) convierte cualquier valor a un tipo que no sea nulo y lanza una excepción si el valor es nulo:
val l = b!!.length
Deberíamos manejar el NullPointerException.
Por ultimo tenemos unos chiches, por ejemplo si un valor es nulo y queremos castear nos va traer problema si este valor es null por lo tanto tenemos el as?
val aInt: Int? = a as? Int
Si tenemos una lista que permite nulos y queremos solo los valores no nulos contemos con filterNotNull :
val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull()
Y ya esta, que más queres?
Dejo link:
https://kotlinlang.org/docs/reference/null-safety.html