Saltar al contenido

¿Qué hace?: hacer en Kotlin? (Operador Elvis)

Hola usuario de nuestra web, descubrimos la solución a lo que andabas buscando, continúa leyendo y la hallarás un poco más abajo.

Solución:

TL; DR: si la referencia de objeto resultante [first operand] no es null, se devuelve. De lo contrario, el valor del segundo operando (que puede ser null) es regresado. Además, el operador puede lanzar una excepción si null es regresado.


los operador de elvis es parte de muchos lenguajes de programación, por ejemplo, Kotlin pero también Groovy o C#. Encuentro la definición de Wikipedia bastante precisa:

En ciertos lenguajes de programación de computadoras, el operador de elvis?: es un operador binario que devuelve su primer operando si ese operando es true, y de lo contrario evalúa y devuelve su segundo operando. Es un variante del operador condicional ternario, ? :que se encuentra en esos idiomas (y muchos otros): el operador Elvis es el operador ternario con su segundo operando omitido.

Lo siguiente es especialmente true para Kotlin:

Algunos lenguajes de programación de computadoras tienen una semántica diferente para este operador. En lugar de que el primer operando tenga que dar como resultado un booleano, debe dar como resultado una referencia de objeto. Si la referencia de objeto resultante no es null, se devuelve. De lo contrario, el valor del segundo operando (que puede ser null) es regresado. Si el segundo operando es nullel operador también puede generar una excepción.

Un ejemplo:

x ?: y // yields `x` if `x` is not null, `y` otherwise.
x ?: throw SomeException() // yields `x` if `x` is not null, throws SomeException otherwise

los Operador Elvis se representa con un signo de interrogación seguido de dos puntos: ?: y se puede usar con esta sintaxis:

first operand ?: second operand

Le permite escribir un código conciso y funciona como tal:

Si first operandno es null, entonces será devuelto. Si se es nullentonces el second operand Será devuelto. Esto se puede usar para garantizar que una expresión no devolverá un null valor, ya que proporcionará un valor no anulable si el valor proporcionado es null.


Por ejemplo (en Kotlin):

fun retrieveString(): String     //Notice that this type isn't nullable
    val nullableVariable: String? = getPotentialNull() //This variable may be null
    
    return nullableVariable ?: "Secondary Not-Null String"

En este caso, si el valor calculado de getPotentialNull no es nullserá devuelto por retrieveString; Si esto es nullla segunda expresión "Secondary Not-Null String" será devuelto en su lugar.

También tenga en cuenta que la expresión del lado derecho se evalúa solamente si el lado izquierdo es null.

En Kotlin, podrías usar cualquier expresión como second operandcomo una throw Exception expresión

return nullVariable ?: throw IllegalResponseException("My inner function returned null! Oh no!")

El nombre Elvis Operator proviene del famoso cantante estadounidense elvis presley. Su peinado se asemeja a un signo de interrogación.

Elvis interrogante

Fuente: Wojda, I. Moskala, M. Desarrollo de Android con Kotlin. 2017. Packt Publishing

Esto se llama el operador Elvis y hace… Exactamente lo que has descrito en tu pregunta. Si su lado izquierdo es un null valor, devuelve el lado derecho en su lugar, como una especie de reserva. De lo contrario, simplemente devuelve el valor en el lado izquierdo.

a ?: b es solo una abreviatura de if (a != null) a else b.

Algunos ejemplos más con tipos:

val x: String? = "foo"
val y: String = x ?: "bar"      // "foo", because x was non-null    

val a: String? = null
val b: String = a ?: "bar"      // "bar", because a was null

Comentarios y puntuaciones de la guía

Si posees algún reparo y disposición de ascender nuestro artículo eres capaz de ejecutar una referencia y con placer lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *