Diferencia entre !! Y ? Operadores en Kotlin
- el concepto de seguridad nula
-
Operador de seguridad nula
?
en Kotlin -
Afirmación no nula
!!
Operador en Kotlin
En Kotlin, el operador de afirmación !!
y el operador de llamada segura ?
trabajar con seguridad nula.
Este artículo introduce el concepto de seguridad nula. También veremos cómo !!
y ?
en Kotlin ayuda con la seguridad nula.
el concepto de seguridad nula
El sistema de tipos de Kotlin tiene como objetivo eliminar el problema de la referencia nula. El problema es que en muchos lenguajes de programación con el concepto nulo, acceder a un miembro de referencia nulo conduce a una excepción.
En Kotlin, esta excepción se llama NullPointerException
o NPE. El sistema de tipos en Kotlin tiene como objetivo superar el problema de la referencia nula a través de la seguridad nula.
El sistema distingue las referencias que pueden y no pueden contener referencias nulas. Por ejemplo, una variable de cadena estándar no puede contener nulo
, pero ¿Cadena?
poder.
Aquí están los ejemplos para demostrar lo mismo.
El primer ejemplo usa una variable estándar, lo que significa una referencia no nula.
fun main() {
var s: String = "Hello" // Regular initialization means a non-null value
println(s)
}
Producción:
Si intentamos usar null
con una variable estándar, arroja un error.
fun main() {
var s: String = null
println(s)
}
Producción:
El segundo ejemplo utiliza String?
, que puede ser nulo
.
fun main() {
var s: String? = null // we can set this to null
print(s)
}
Producción:
Como vemos, solo String?
puede contener nulo
. Por lo tanto, si se trata de una inicialización de variable estándar, el sistema de tipos de Kotlin puede entender que no tendrá un valor nulo
.
Por lo tanto, puede llamar rápidamente a dicha referencia sin preocuparse por NPE.
Pero, ¿qué pasa con las variables que pueden contener nulo
? No podemos acceder a esas variables directamente ya que no son seguras para NPE.
fun main() {
var s: String? = null // we can set this to null
print(s)
val l = s.length // This throws error as 's' can be null
}
Producción:
Pero entonces, ¿cómo se accede a tales variables? Y la respuesta es a través de ?
y !!
operadores.
Operador de seguridad nula ?
en Kotlin
Una forma de acceder a los miembros de referencia nulos es con la ayuda de ?
. El uso de este operador devuelve el valor si la variable no es nula y nula
en caso contrario.
Consideremos los siguientes ejemplos para entender esto.
Usaremos un valor no nulo para el primer ejemplo y obtendremos su longitud.
Ejemplo 1:
fun main() {
var s: String? = "Hello"
println(s)
val l = s?.length
print(l)
}
Producción:
Ahora, inicializaremos la variable como null
.
Ejemplo 2:
fun main() {
var s: String? = null
println(s)
val l = s?.length
print(l)
}
Producción:
El operador seguro ?
también es útil para crear cadenas.
Por ejemplo, considere a un empleado de una empresa. Es posible que tenga un líder de equipo que trabajará con un gerente.
Nosotros podemos usar ?
para crear una cadena y acceder al nombre del manager de David de la siguiente forma:
employeename?.teamleader?.manager?.name
Podemos leer la sintaxis anterior como:
- Si el
nombre del empleado
no es nulo, devolver el departamento. - Si el
departamento
no es nulo, devolver el gerente. - Si el
gestor
no es nulo, devuelve el nombre.
Si alguna de las variables es nula
, la sintaxis devolverá nula
.
Afirmación no nula !!
Operador en Kotlin
Otra opción para acceder a miembros de referencia nula es usar el !!
operador. Es para los amantes de la NPE.
Entonces, si desea que la acción de acceder a miembros de referencia no nulos proporcione el valor si lo hay o arroje NPE, puede usar este operador en Kotlin.
Consideremos los mismos dos ejemplos que hicimos para la caja fuerte ?
operador para entender cómo la afirmación no nula !!
opera el operador.
Ejemplo 1:
fun main() {
var s: String? = "Hello"
println(s)
val l = s!!.length
print(l)
}
Producción:
Ejemplo 2:
fun main() {
var s: String? = null
println(s)
val l = s!!.length
print(l)
}
Producción:
Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.
LinkedIn