If...Else en Rust
if le permite a tu programa tomar decisiones: ejecutar un bloque de código u otro, según una condición.
if básico
Sección titulada «if básico»fn main() { let age = 20;
if age >= 18 { println!("Puedes votar"); }}Fíjate en un par de detalles, porque suelen confundir a quien viene de otros lenguajes:
- La condición no lleva paréntesis: se escribe
if age >= 18, noif (age >= 18). - La condición tiene que ser un
boolde verdad.if age(un número) no compila; necesitas algo comoif age != 0.
if / else
Sección titulada «if / else»fn main() { let age = 15;
if age >= 18 { println!("Puedes votar"); } else { println!("Todavía no tienes la edad"); }}else if para más ramas
Sección titulada «else if para más ramas»fn main() { let score = 72;
if score >= 90 { println!("Nota: A"); } else if score >= 75 { println!("Nota: B"); } else if score >= 60 { println!("Nota: C"); } else { println!("Nota: F"); }}Rust revisa cada condición de arriba hacia abajo y ejecuta la primera que se cumple, tal como esperarías.
if como expresión
Sección titulada «if como expresión»Esto es algo que Rust hace y muchos lenguajes no: if puede producir un valor. Eso significa que puedes usarlo a la derecha de un let:
fn main() { let age = 20; let status = if age >= 18 { "adulto" } else { "menor" };
println!("{status}");}Funciona igual que cuando una función devuelve un valor: no se pone punto y coma después del valor en cada rama. Solo hay un requisito: las dos ramas deben producir el mismo tipo (aquí, ambas son &str).
Combinar condiciones en lugar de anidarlas
Sección titulada «Combinar condiciones en lugar de anidarlas»Puedes poner un if dentro de otro if. Funciona, pero con dos o tres niveles de profundidad se vuelve difícil de leer. Muchas veces puedes unir las condiciones con los operadores lógicos && (y) y || (o):
fn main() { let temperature = 22; let is_raining = false;
// Anidado: funciona, pero se va desplazando a la derecha if temperature > 15 { if !is_raining { println!("Anidado: sal a caminar"); } }
// La misma comprobación en una sola condición if temperature > 15 && !is_raining { println!("Combinado: sal a caminar"); }
// || es verdadero si cualquiera de los dos lados lo es if temperature < 0 || temperature > 35 { println!("Quédate en casa"); } else { println!("Hace buen tiempo"); }}Salida:
Anidado: sal a caminarCombinado: sal a caminarHace buen tiempoAnidar sigue teniendo sentido cuando el bloque interior hace algo más, o cuando tiene su propio else. Pero cuando el if exterior solo sirve para proteger al interior, && dice lo mismo de forma más sencilla. Para comprobar que un número está dentro de un rango, escribe temperature >= 15 && temperature <= 25. Rust no permite 15 <= temperature <= 25.
Práctica
Sección titulada «Práctica»1. Par o impar
Sección titulada «1. Par o impar»Guarda un número n = 7. Usa if como expresión para darle a una variable kind el valor "par" o "impar", y luego imprime 7 es impar. Pista: un número es par cuando n % 2 == 0.
Ver solución
fn main() { let n = 7; let kind = if n % 2 == 0 { "par" } else { "impar" }; println!("{n} es {kind}");}Salida:
7 es impar2. Precios de las entradas
Sección titulada «2. Precios de las entradas»Un cine cobra 5 dólares a los menores de 12 años, 7 a las personas de 65 años o más y 12 a todos los demás. Guarda una age de 70, calcula el price con una sola expresión if / else if / else e imprime Entrada: $7. Pista: cada rama tiene que devolver un número, y el if completo termina con un punto y coma después de la última }.
Ver solución
fn main() { let age = 70;
let price = if age < 12 { 5 } else if age >= 65 { 7 } else { 12 };
println!("Entrada: ${price}");}Salida:
Entrada: $7Resumen
Sección titulada «Resumen»if condición { ... }: no hacen falta paréntesis y la condición debe ser unbool.- Encadena más comprobaciones con
else ify deja un caso por defecto conelse. - Une condiciones con
&&y||en lugar de anidar unifdentro de otro. ifse puede usar como expresión para producir un valor: las dos ramas deben tener el mismo tipo y necesitas unelse.
Comprueba lo que aprendiste
Sección titulada «Comprueba lo que aprendiste»Comprueba lo aprendido
1. ¿Qué es obligatorio en la condición de un if en Rust?
2. Cuando usas if como expresión con let, ¿qué deben cumplir las dos ramas?
Puntuación: 0 / 2
Para leer más
Sección titulada «Para leer más»ifExpressions: The Rust Book (en inglés): el recorrido oficial porif,else ify el uso deifen unlet.- if/else: Rust by Example (en inglés): un ejemplo ejecutable que muestra ramas que producen un valor.
- If expressions: The Rust Reference (en inglés): las reglas exactas, para cuando quieras los detalles precisos.
- Rust en Exercism (en inglés): ejercicios de práctica gratuitos con mentoría; los primeros se apoyan mucho en
ifyelse.