Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Elvis operator

20/37
Recursos

Aportes 16

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

💚💯😅😅😅

Algunos datos adicionales para Elvis Operator:

Kotlin Version

fun decompileTest(person: Person?) {
    val name = person?.name ?: "raul"
    val age = person?.age ?: throw IllegalArgumentException("raul is null")
}

Decompile Version

public static final void decompileTest(@Nullable Person person) {
  if (person == null || person.getName() == null) {
     String var10000 = "raul";
  }

  if (person != null) {
     int var2 = person.getAge();
  } else {
     throw (Throwable)(new IllegalArgumentException("raul is null"));
  }
}

El Elvis operator ?: Es una versión segura de una expresión if. Devuelve el valor a su izquierda si no es nulo. De lo contrario, devuelve el valor a su derecha… por ejemplo:

w?.play ?: -1

El Elvis operator primero verifica el valor a su izquierda, en este caso w?.play y si ese valor no es null, el Elvis operator lo retorna. En el caso de que el valor de la izquierda sea null, el Elvis operator retornara el valor de la derecha, en este caso -1

es como decir "si w no es nulo y su propiedad de play no es nula, devuelve el valor de la propiedad de play, de lo contrario, devuelve -1

Pueden encontrar mas información sobre este tema en el libro que les recomende anteriormente Head First Kotlin!

Este ejemplo lo dejó mucho más claro para mí:

println("Practicando operador Elvis")
        val m: String? = null
        val l: Int = if (m != null) m.length else -1
        println(l)

        //Con el operador Elvis expresamos
        // lo mismo que en la línea anterior
        val c = m?.length ?: -1
        println(c)

Si la expresión a la izquierda de ?: no es nula, el operador Elvis la devuelve; de lo contrario, devuelve la expresión a la derecha. Tenga en cuenta que la expresión del lado derecho se evalúa sólo si el lado izquierdo es nulo.

Entonces este operador vendría siendo como ternario reducido de Java, donde se tenía:

int caracteresDelNombre = ( nombre != null) ? nombre.length : 0;

o en JS el operador ||, donde lo usamos como:

const caracteresDelNombre = nombre?.length || 0

El curso está bien, pero…
no veo nada , tengo que ponerlo en pantalla completa para ver bien el código.

Esto en cierta forma me recordo al operador ternario, claro aun que al parecer elvis solo comprueba null

Un pequeño codigo para repasar

fun main() {
    println("Diga un nombre ")
    var nombre : String? = readLine().toString()
    var largonombre : Int = nombre?.length ?: 0
    when(largonombre){
        0 -> println("Error, complete el formulario")
        else ->  println("El largo del nombre es de $largonombre letras")
    }
}

OPERADOR ELVIS

En Kotlin, podemos declarar una variable que puede contener null reference. Supongamos que tenemos una referencia anulable a, podemos decir “si ano es nulo, utilícelo, de lo contrario use algún valor no nulo x”

var a: String? = "Nullable String Value"

Ahora, apuede ser nulo. Entonces, cuando necesitamos acceder al valor de a, debemos realizar una verificación de seguridad, ya sea que contenga valor o no. Podemos realizar esta verificación de seguridad mediante una if…elsedeclaración convencional .

val b: Int = if (a != null) a.length else -1

Pero aquí viene el operador avanzado Elvis(Operador Elvis 😃 ?:. Lo anterior if…elsese puede expresar con el operador de Elvis de la siguiente manera:

val b = a?.length ?: -1

Si la expresión a la izquierda de ?:(aquí a?.length:) no es nula, el operador elvis la devuelve; de ​​lo contrario, devuelve la expresión a la derecha (aquí:) -1. La expresión del lado derecho se evalúa solo si el lado izquierdo es nulo.

var nomb: String? = null
    var caracteresDenomb : Int = nomb?.length ?: 0
    println(caracteresDenomb)

Que excelente ese operador elvis!!!

Se podria decir que el operador elvis es un ternario con super poderes, muy interesante la verdad no lo habia manejado en ningun otro lenguaje.

El Elvis Operator funciona como un condicional, en caso de que la variable sea no nullable pero la operacion de asignacion devuelva un null entonces asigna el valor por defecto definido

fun main(args: Array<String>) {
	var nombre: String? = null
	
	// el operador elvis ?: asigna un valor por defecto en caso de que sea null
	var caracteresDeNombre = Int = nombre?.length ?: 0
	println(caracteresDeNombre)
}

Para los que venimos de java:
Evlis operator en kotlin está mas relacionado con el tema del Null Safety que con el tradicional elvis en java, puede usarse la sentencia if para asignar y usarlo como se usa elvis en java, a saber:

val menor=if(1<2) 1 else 2