Afirmación de no nulidad
Parte de la sección Fundamentos del Journey de Kotlin de Coddy. Lección 17 de 93.
El operador de llamada segura y el operador Elvis manejan los valores nulos correctamente, pero a veces estás absolutamente seguro de que un valor que admite valores nulos no es nulo en un punto específico de tu código. El operador de aserción de no nulidad !! te permite decirle a Kotlin: «Garantizo que esto no es nulo».
fun main() {
val name: String? = "Alice"
val length = name!!.length // Convierte String? a String
println(length) // Imprime: 5
}El operador !! convierte un tipo que admite valores nulos en su equivalente que no admite valores nulos. Sin embargo, si el valor realmente es nulo, tu programa se bloqueará con una NullPointerException:
fun main() {
val name: String? = null
val length = name!!.length // ¡Se estrella aquí!
}Cuándo usarlo: Usa !! únicamente cuando tengas una lógica que garantice que el valor no puede ser nulo, pero el compilador no pueda verificarlo. En la mayoría de los casos, prefiere las llamadas seguras ?. o el operador Elvis ?:. La aserción de no nulo debe ser tu último recurso, no tu primera opción.
Desafío
FácilEscribe una función getUppercaseLength que reciba un parámetro text y devuelva la longitud de su versión en mayúsculas.
La función recibe un valor de cadena no nulo, pero el tipo del parámetro admite valores nulos (String?). Usa el operador de afirmación de no nulidad !! para convertirlo a un tipo que no admita valores nulos; después, encadena el método uppercase() y obtén el length.
Parámetros:
text(String?): Una cadena que admite valores nulos y que tiene garantizado contener un valor
Devuelve: La longitud de la versión en mayúsculas del texto (Int)
Nota: Para este desafío, la entrada siempre será una cadena válida, nunca
null. Esto simula una situación en la que sabes que el valor existe, pero el compilador no puede verificarlo.
Pruébalo tú mismo
fun getUppercaseLength(text: String?): Int {
// Escribe el código aquí
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores, parte 1
Operadores aritméticosOperador móduloAsignación aumentadaOperadores de comparaciónRepaso: matemáticas simples7Entrada y salida básicas
Función PrintlnPlantillas de cadenasEntrada con ReadLineConversión de tiposRepaso - Años hasta la jubilaciónRepaso - Verdadero o falso10Funciones
Declarar una funciónParámetros y argumentosValores de retornoArgumentos con nombreValores predeterminadosFunciones de una sola expresiónRepaso - Función SigmaRepaso - Función de validación2Variables
Val frente a VarInferencia de tiposNúmerosCadenaBooleanoConvenciones de nomenclaturaRepaso: inicializar variables5Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Operadores lógicos Parte 3Ternario con expresión ifRepaso: lógica simple8Calculadora para dividir la cuenta
Mensaje de bienvenidaObtención de datos11FizzBuzz con un giro
Descripción general del juegoLa función FizzBuzz3Nullabilidad
Qué es la seguridad frente a valores nulosTipos anulablesOperador de llamada seguraOperador ElvisConceptos básicos de retos de funcionesAfirmación de no nulidadRepaso: acceso seguro6Toma de decisiones
Sentencia ifIf - ElseIf como expresiónExpresión whenWhen con rangosRepaso - Calculadora simple9Bucles
Bucle ForBucle WhileBucle Do-WhileBreakContinueRangos en buclesBucle anidadoRepaso - FactorialRepaso - Entrada dinámicaPractica por tu cuenta: Playground de Kotlin