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 estrue
, 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 sernull
) 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 operand
no 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 operand
como 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.
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.