El operador !!
Fuerce valores no nulos y conozca sus riesgos
El operador !! es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.
Forzar que no sea nulo
A veces está seguro de que un valor anulable no es nulo, pero el compilador sigue mostrando un error.
El operador de aserción de no nulidad !! indica al compilador que confíe en usted y trate el valor como no nulo.
Uso básico
Añadir !! convierte un tipo anulable en su equivalente no nulo.
Si el valor realmente no es nulo, el código funciona exactamente igual que una llamada normal.
fun main() {
val name: String? = "Kotlin"
println(name!!.length)
}El peligro
Si el valor es realmente null, !! lanza una NullPointerException justo en ese punto.
Este es el único lugar en el que Kotlin permite que ocurra una NPE, y la responsabilidad recae completamente en usted.
fun main() {
val name: String? = null
try {
println(name!!.length)
} catch (e: NullPointerException) {
println("Boom: NullPointerException")
}
}Por qué existe
El operador es deliberadamente poco atractivo. Los dos signos de exclamación destacan en la revisión del código y señalan un punto en el que ha prescindido de la red de seguridad.
Existe para los casos excepcionales en los que realmente sabe más que el compilador.
La llamada segura suele ser mejor
En la mayoría de las situaciones, una llamada segura ?. con Elvis ?: es más segura y ocupa lo mismo.
Compare a continuación los dos enfoques para conseguir el mismo objetivo.
fun main() {
val name: String? = null
val safeLength = name?.length ?: 0
println(safeLength)
}Evite encadenar !!
No encadene nunca varios !! como en a!!.b!!.c. Si se produce un error, no podrá saber qué parte era nula.
Separe la expresión o utilice llamadas seguras.
fun main() {
val text: String? = "hi"
// bad style: text!!.uppercase()!! is hard to debug
val good = text?.uppercase() ?: ""
println(good)
}Un uso legítimo
Un caso aceptable: un valor que ha establecido anteriormente y sabe que ya está inicializado.
Aun así, cuando sea posible, prefiera lateinit o reestructure el código.
fun main() {
var config: String? = null
config = "loaded"
// we just assigned it, so !! is safe here
println(config!!.uppercase())
}Leer el seguimiento de la pila
Cuando !! falla, la excepción señala la línea exacta. Esa precisión es la única ventaja frente a obtener un resultado incorrecto sin ninguna indicación.
Utilice el mensaje para encontrar y corregir la suposición equivocada.
fun length(text: String?): Int {
return text!!.length
}
fun main() {
println(length("abc"))
// length(null) would throw on the !! line
}Eliminar !! mediante refactorización
La mayoría de los !! se pueden eliminar gestionando correctamente los valores nulos. A continuación, un valor alternativo de Elvis hace que la función sea total y no pueda provocar errores.
fun length(text: String?): Int {
return text?.length ?: 0
}
fun main() {
println(length("abc"))
println(length(null))
}Regla práctica
Considere cada !! como una pregunta: ¿estoy absolutamente seguro de que esto nunca será nulo?
- Si la respuesta es sí y el caso es excepcional → es aceptable
- Si no está seguro → utilice
?.y?:
Todo junto
El operador !! es una herramienta de doble filo:
- Fuerza un valor anulable a convertirse en un tipo no nulo
- Lanza una NullPointerException si el valor es nulo
- Prefiera las llamadas seguras y Elvis en casi todos los casos
fun main() {
val sure: String? = "definitely here"
println(sure!!.length)
val maybe: String? = null
println(maybe?.length ?: -1)
}Comprobación rápida
Compruebe cuánto ha comprendido sobre el operador de aserción de no nulidad.
Repaso
Ha aprendido sobre el operador !!:
- Afirma que un valor anulable no es nulo
- Lanza una NullPointerException cuando la afirmación es incorrecta
- Debe ser el último recurso, no un hábito
A continuación verá cómo llega la nulabilidad desde Java mediante los tipos de plataforma.
Aprende Kotlin con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «El operador !!» es gratis?
Sí — el texto completo de «El operador !!» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.
¿Qué aprenderé en «El operador !!»?
Fuerce valores no nulos y conozca sus riesgos Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Kotlin Academy?
No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «El operador !!»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?
Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.