Diferencia entre !! Y ? Operadores en Kotlin

Kailash Vaviya 15 febrero 2024
  1. el concepto de seguridad nula
  2. Operador de seguridad nula ? en Kotlin
  3. Afirmación no nula !! Operador en Kotlin
Diferencia entre !! Y ? Operadores 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:

Variable de inicialización regular

Si intentamos usar null con una variable estándar, arroja un error.

fun main() {
    var s: String = null
    println(s)
}

Producción:

Variable de inicialización regular con valor nulo

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:

¿Cadena? Variable con valor nulo

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:

Cadena de acceso? Error de lanzamientos variables

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:

Cadena de acceso? Variable con valor no nulo

Ahora, inicializaremos la variable como null.

Ejemplo 2:

fun main() {
    var s: String? = null
    println(s)

    val l = s?.length
    print(l)
}

Producción:

Cadena de acceso? Variable con valor nulo

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:

Cadena de acceso? Variable con afirmación no nula 1

Ejemplo 2:

fun main() {
    var s: String? = null
    println(s)

    val l = s!!.length
    print(l)
}

Producción:

Cadena de acceso? Variable con aserción no nula 2

Kailash Vaviya avatar Kailash Vaviya avatar

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

Artículo relacionado - Kotlin Operator