Sobes.tech
Junior

Explica qué es la seguridad nula en el lenguaje Kotlin.

sobes.tech AI

Respuesta de la IA

Null safety — es una función del lenguaje Kotlin que previene errores relacionados con referencias null. Se logra creando dos tipos de referencias: nullable (que permite null) y non-nullable (que no permite null).

Los tipos non-nullable se declaran como de costumbre:

var nonNullableString: String = "Hello" // No puede ser null

Los tipos nullable se declaran usando el símbolo ? después del nombre del tipo:

var nullableString: String? = "Hello" // Puede ser null
nullableString = null

Kotlin requiere un manejo explícito de los tipos nullable, evitando acceder directamente a sus miembros sin verificar antes si son null. Para ello, proporciona los siguientes mecanismos:

  1. Operador de llamada segura (?.): Invoca un método o accede a una propiedad solo si el objeto no es null. En caso contrario, devuelve null.

    val length = nullableString?.length // length será Int? o null
    
  2. Operador Elvis (?:): Proporciona un valor por defecto si la expresión a la izquierda del operador es null.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength será Int, 0 si nullableString es null
    
  3. Operador de afirmación de no-null (!!): Convierte un tipo nullable en no-nullable. Si el valor es null, lanza una excepción NullPointerException. Se usa cuando el desarrollador está seguro de que el valor no es null.

    val sureLength = nullableString!!.length // Lanzará NullPointerException si nullableString es null
    
  4. Verificaciones con if: Verificación tradicional de null usando if. El compilador realiza un smart cast (conversión inteligente) del tipo nullable a no-nullable dentro del bloque if, si la verificación pasa.

    if (nullableString != null) {
        val length = nullableString.length // Aquí nullableString se trata como String
    }
    

Estos mecanismos permiten gestionar explícitamente las situaciones en las que una variable puede ser null, reduciendo significativamente la probabilidad de NullPointerException en tiempo de ejecución.