lessons for dummies compiler codecademy kotlin

for - Rápido si deja la declaración en Kotlin



kotlin vs java (7)

if let declaración.

El Optional Binding de Swift (llamado enunciado if-let ) se usa para averiguar si un opcional contiene un valor y, de ser así, hacer que ese valor esté disponible como una constante o variable temporal. Entonces, un Optional Binding para la instrucción if-let es el siguiente:

La declaración if-let Swift:

let b: Int? = 50 if let a = b { print("Good news!") } else { print("Equal to ''nil'' or not set") } /* RESULT: Good news! */

En Kotlin, como en Swift, para evitar bloqueos causados ​​por intentar acceder a un valor nulo cuando no se espera, se proporciona una sintaxis específica (como b.let { } en el segundo ejemplo) para desenvolver correctamente nullable types :

Kotlin equivalente 1 de la declaración if-let de Swift:

val b: Int? = null val a = b if (a != null) { println("Good news!") } else { println("Equal to ''null'' or not set") } /* RESULT: Equal to ''null'' or not set */

La función let de Kotlin, cuando se usa en combinación con el operador de llamada segura ?: , Proporciona una forma concisa de manejar expresiones anulables.

Kotlin equivalente 2 (función let en línea y operador de Elvis) de la declaración if-let de Swift:

val b: Int? = null val a = b.let { nonNullable -> nonNullable } ?: "Equal to ''null'' or not set" println(a) /* RESULT: Equal to ''null'' or not set */

guard let declaración.

guard-let declaración guard-let en Swift es simple y poderosa. Comprueba si hay alguna condición y si se evalúa como falsa, se ejecuta la instrucción else que normalmente saldrá de un método.

Exploremos la declaración de guard-let Let Swift:

let b: Int? = nil func testIt() { guard let a = b else { print("Equal to ''nil'' or not set") return } print("Good news!") } testIt() /* RESULT: Equal to ''nil'' or not set */

El efecto similar de Kotlin de la declaración de guard-let de Swift:

A diferencia de Swift, en Kotlin, no hay ninguna declaración de guardia . Sin embargo, puede usar el Elvis Operator - ?: Para obtener un efecto similar.

val b: Int? = 50 fun testIt() { val a = b ?: return println("Equal to ''null'' or not set") return println("Good news!") } testIt() /* RESULT: Good news! */

Espero que esto ayude.

En Kotlin, ¿hay un equivalente al código Swift a continuación?

if let a = b.val { } else { }


A diferencia de Swift, no es necesario desenvolver lo opcional antes de usarlo en Kotlin. Podríamos verificar si el valor no es nulo y el compilador rastrea la información sobre la verificación que realizó y permite usarlo como desenvuelto.

En Swift:

if let a = b.val { //use "a" as unwrapped } else { }

En Kotlin:

b.val?.let{a -> //use "a" as unwrapped } ?: run{ //else case }

Consulte la documentación: (seguridad nula) para más casos de uso


Aquí se explica cómo ejecutar solo el código cuando el name no es nulo:

var name: String? = null name?.let { nameUnwrapp -> println(nameUnwrapp) // not printed because name was null } name = "Alex" name?.let { nameUnwrapp -> println(nameUnwrapp) // printed "Alex" }


Hay una forma similar en Kotlin para lograr el estilo de Swift if-let

if (val a = b) { a.doFirst() a.doSecond() }

También puede asignar múltiples valores anulables

if (val name = nullableName, val age = nullableAge) { doSomething(name, age) }

Este tipo de enfoque será más adecuado si los valores anulables se usan más de 1 vez. En mi opinión, ayuda desde el aspecto del rendimiento porque el valor anulable se verificará solo una vez.

fuente: Discusión de Kotlin


Mi respuesta es totalmente una copia del gato de los demás. Sin embargo, no puedo entender su expresión fácilmente. Así que supongo que sería bueno proporcionar una respuesta más comprensible.

En rápido:

if let a = b.val { //use "a" as unwrapped } else { }

En Kotlin:

if b.val != null { //use "b.val" as unwrapped } else { }


Primero asegurémonos de comprender la semántica del idioma Swift proporcionado:

if let a = <expr> { // then-block } else { // else-block }

Significa esto: "si el <expr> resulta en una opción no nula, ingrese el bloque- then con el símbolo a enlace al valor desenvuelto. De lo contrario, ingrese el bloque else .

Especialmente tenga en cuenta que a está limitado solo dentro del bloque- then . En Kotlin puede obtener esto fácilmente llamando

<expr>?.also { a -> // then-block }

y puedes agregar un bloque else como este:

<expr>?.also { a -> // then-block } ?: run { // else-block }

Esto da como resultado la misma semántica que el idioma Swift.


Puede usar la función let esta manera:

val a = b?.let { // If b is not null. } ?: run { // If b is null. }

Tenga en cuenta que debe llamar a la función de run solo si necesita un bloque de código. Puede eliminar el bloque de run si solo tiene un marcador de línea después del operador elvis ( ?: :).

Tenga en cuenta que el bloque de run se evaluará si b es nulo o si let -block se evalúa como null .

Debido a esto, generalmente solo quieres una expresión if .

val a = if (b == null) { // ... } else { // ... }

En este caso, el bloque else solo se evaluará si b es nulo.