Las sentencias if permiten que el programa tome decisiones ejecutando diferentes bloques de código según si una condición es verdadera o falsa. En Rust, la sintaxis tiene dos reglas fundamentales que lo distinguen de lenguajes como C o Java: no se utilizan paréntesis () para envolver la condición, pero el uso de llaves {} para el cuerpo del bloque es obligatorio, incluso si solo hay una línea de código.
Una de las características más potentes de Rust es que if no es solo una sentencia, sino también una expresión. Esto significa que un bloque if puede devolver un valor que puede ser asignado directamente a una variable. Sin embargo, esto impone una restricción estricta: todos los brazos de la expresión (if y todos los else) deben retornar exactamente el mismo tipo de dato. Si intentas asignar un entero en el bloque if y una cadena de texto en el else, el compilador de Rust rechazará el código para garantizar la seguridad de tipos. Si un if no se utiliza para asignar un valor, se trata como una sentencia y devuelve el tipo unitario ().
Al encadenar condiciones, utilizamos else if. Es importante evitar la redundancia de escribir if condicion == true; en Rust, basta con if condicion, ya que la expresión ya evalúa a un booleano. Además, el compilador es lo suficientemente inteligente para detectar condiciones triviales (como if true) y emitir una advertencia.
fn main() {
let numero: i32 = 10;
// Uso estándar de if, else if y else
if numero > 0 {
println!("El número es positivo");
} else if numero == 0 {
println!("El número es cero");
} else {
println!("El número es negativo");
}
// Uso de 'if' como expresión para asignar un valor a una variable
// Todos los brazos deben retornar el mismo tipo (&str)
let categoria = if numero > 10 {
"Mayor a diez" // Retorna &str
} else {
"Diez o menor" // Retorna &str
};
// Ejemplo de uso de booleano sin comparación redundante
let es_par = true;
if es_par {
println!("El booleano es verdadero");
}
println!("Resultado de la categoría: {}", categoria);
}
Análisis del código
numero: Es una variable de tipoi32(entero de 32 bits) que contiene el valor10. Se utiliza para las evaluaciones lógicas.- Bloque
if / else if / else:- La primera condición
numero > 0se evalúa como verdadera, imprimiendo “El número es positivo”. else if numero == 0actúa como una segunda opción si la primera falla.elsecaptura cualquier otro caso restante (en este caso, si fuera negativo).
- La primera condición
categoria: Aquíiffunciona como una expresión. Se asigna el resultado del bloqueif-elsedirectamente a la variablecategoria.- Es fundamental que tanto el bloque
ifcomo elelsedevuelvan un tipo&str(referencia a cadena). Si uno devolviera un número, el compilador fallaría. - Nota que el
elsees obligatorio cuando usamosifcomo expresión para asegurar quecategoriasiempre esté inicializada.
- Es fundamental que tanto el bloque
es_par: Es una variable booleana. En la instrucciónif es_par, no comparamoses_par == true, lo cual es la forma idiomática y correcta en Rust.println!: Se utiliza para imprimir los resultados finales en la consola.
N° 21