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 鈥渟i 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鈥lsedeclaraci贸n convencional .

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

Pero aqu铆 viene el operador avanzado Elvis(Operador Elvis 馃槂 ?:. Lo anterior if鈥lsese 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 鈥嬧媗o 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