Expresiones condicionales
⏱ Dedicación recomendada: 0 minutos
Esto considera el contenido visible y relevante, e ignora texto colapsado o marcado como opcional.
r8vnhill/intro-kt
Las estructuras condicionales son uno de los pilares del control de flujo en cualquier lenguaje de programación.
Sin embargo, Kotlin ofrece una perspectiva más expresiva y funcional que lenguajes imperativos tradicionales como Java, al permitir que construcciones como if
y when
no sean solo declaraciones, sino también expresiones que devuelven valores.
Este enfoque habilita un estilo de programación más conciso, declarativo y alineado con la escritura de funciones puras y reutilizables. En esta lección aprenderemos a diferenciar entre declaraciones y expresiones condicionales, y a aprovechar la expresividad de Kotlin para construir funciones más limpias y mantenibles.
También exploraremos el uso idiomático de when
, una alternativa poderosa a múltiples if
anidados, y discutiremos sus diferencias con el pattern matching en lenguajes como Scala o Rust.
🔀 Expresión if
En Kotlin, if
puede usarse como una expresión que retorna un valor, no solo como una declaración de control, como en muchos lenguajes imperativos.
fun maxOf(a: Int, b: Int) = if (a > b) a else b
Esto permite escribir funciones más concisas y expresivas.
Cuando no necesitas obtener un valor, también puedes usar if
como declaración, simplemente para ejecutar código condicional:
if (isLoggedIn) {
println("Welcome back!")
}
// else es opcional si se usa como declaración
else
, no hay valorCuando if
se utiliza como expresión, el bloque else
es obligatorio.
Si lo omites, el compilador no sabrá qué valor retornar:
val result = if (x > 0) "Positive" // ❌ Error de compilación: falta `else`
if
: ¿cuándo son necesarias?-
Si una rama (
if
oelse
) tiene más de una línea, las llaves{}
son obligatorias. -
Si tiene una sola línea, pueden omitirse, aunque se recomienda mantenerlas para evitar errores al modificar el código.
-
En expresiones
if
, el valor retornado será el de la última expresión evaluada en cada rama.if como expresión simpleval result = if (x > 0)
"positive"
else
"negative"En este caso, el valor de
result
será"positive"
o"negative"
, según la condición.
Con llaves, se aplica la misma lógica:if como expresión con efectos colateralesval result = if (x > 0) {
println("Evaluating...")
"positive"
} else {
println("Evaluating...")
"negative"
}Aquí, cada rama imprime un mensaje y luego retorna una cadena como resultado.