Una de las diferencias entre Java y Kotlin, es que ahora no arroja los famosos NullPointerException que tantos quebraderos de cabeza nos ha dado a mas de uno, ya que en el 99% de los errores que suele salir en Java son de este tipo. Los nulos en Kotlin no «existen» hasta que no lo digamos nosotros.
Existen dos operadores muy útiles a la hora de tratar con variables nulas:
- Acceso seguro: Existe una expresión mucho más sencilla para representar el ejemplo de antes, utilizar una
?
delante del.
cuando se llama a un método. Si la variable no es nula, ejecutará la operación. En caso contrario, no hará nada.
- Chequear null: Para esta operación se utiliza el operador
!!
. Con este operador evitaras la necesidad de chequearnull
si estás completamente seguro de que una variable nunca será nula.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
package com.albrivas.kotlin.nullable class Nullable { /* Operadores relacionados con la nulabilidad: - only-safe (?) - non-null asserted (!!) Sistema de tipado de Kotlin está pensado para eliminar de nuestro código el NullPointerException. Los 4 únicos posibles casos para NPE son: 1) Una llamada explícita al error NullPointerException() 2) Uso del operador !! 3) Código externo Java 4) Alguna inconsistencia de datos en relación a la inicialización */ private lateinit var variable1: String // lateinit: metodo de declarar una variable global sin necesidad de declarar private var variable2: String? = null private fun showCase1() { throw NullPointerException() } private fun showCase2(var1: String?) { var1.toString() // Devuelve null en caso de que var1 sea null var1!!.toString() // Devuelve un NPE en caso de que var1 sea null } private fun showCase3() { Other.getNPE() // Devuelve un NPE } private fun showCase4() { variable1.length // Devuelve un NPE porque variable1 no ha sido latenit y se ha marcado como tal variable2?.length variable2!!.length } fun showCases() { showCase1() showCase2("") showCase3() showCase4() } } |
0 comentarios