Lección 3
Variables, funciones y control de flujo
Aprende a guardar valores, transformar datos, elegir caminos y repetir acciones con Rust.
Cuatro piezas para dar instrucciones
Un programa útil necesita recordar datos, aplicar reglas, tomar decisiones y repetir trabajo. Antes de ver la sintaxis de Rust, podemos ordenar esas tareas en cuatro piezas:
- Guardauna cantidad de energía
- Calculacómo transformarla
- Decidesi queda energía
- Repitela operación durante varios turnos
Rust expresa esas cuatro ideas con variables, funciones, if y bucles. No
necesitas saber cómo se guarda cada valor en memoria todavía: aquí nos importa
aprender a leer el recorrido del programa.
Inferencia y anotaciones
Rust necesita conocer el tipo de cada valor, pero muchas veces puede inferirlo:
| Código | Tipo que reconoce | Qué representa |
|---|---|---|
let energy = 4; |
entero, normalmente i32 |
un número sin decimales |
let temperatura = 18.5; |
decimal, normalmente f64 |
un número con decimales |
let activo = true; |
bool |
verdadero o falso |
let simbolo = 'R'; |
char |
un carácter Unicode |
Puedes escribir let energy: i32 = 4; cuando la elección de tipo importe o
cuando quieras hacerla visible. No es necesario anotar cada variable.
Qué bucle elegir
| Forma | Úsala cuando… | Idea clave |
|---|---|---|
for |
tienes una secuencia o un rango que recorrer | avanza automáticamente por cada elemento |
while |
debes repetir mientras una condición sea verdadera | comprueba la condición antes de cada vuelta |
loop |
quieres repetir hasta decidir salir con break |
no tiene condición de salida implícita |
En esta introducción practicarás for, la opción más directa cuando el número
de pasos está descrito por un rango. El Módulo 1 profundizará en while,
loop, break, continue y las etiquetas de bucle.
Antes de ejecutar: predice
Para remaining_energy(3, 2), la variable empieza en 3. El rango 0..2
produce dos vueltas: después de la primera queda 2 y después de la segunda
queda 1. Para remaining_energy(2, 5), las tres vueltas finales siguen
comprobando la condición, pero ya no restan porque la energía ha llegado a 0.
El ejercicio trabaja con energía inicial y turnos no negativos.
Predecir el estado vuelta a vuelta es una forma sencilla de revisar un bucle antes de pedir al compilador que lo ejecute.
Ejercicio 01 · Taller de energía
Haz que la energía dure todos los turnos posibles.
El starter ya conecta las cuatro piezas de la lección: una variable mutable, un bucle for, una condición y un valor de retorno. Completa la actualización que falta.
Objetivo
Completa remaining_energy para entradas no negativas. Cada turno consume una unidad mientras quede energía. El resultado no puede bajar de cero y cero turnos debe conservar la energía inicial.
Implementa
Sustituye `todo!` por `energy -= 1;`.
Función 01
Calcular la energía restante
Completa el cuerpo ya estructurado: descuenta una unidad cuando la condición permite entrar.
/// Calculates the energy remaining after several turns.
pub fn remaining_energy(initial_energy: i32, turns: i32) -> i32 {
let mut energy = initial_energy;
for _turn in 0..turns {
if energy > 0 {
todo!("subtract one unit of energy");
}
}
energy
}Comprueba
Ejecuta tres casos visibles y usa el diagnóstico para corregir el código.
Pruebas visibles
Modifica el código antes de ejecutar las pruebas.
Ayuda
Consulta pistas progresivas o compara con la solución.
/// Calculates the remaining energy without allowing a non-negative input to drop below zero.
#[must_use]
pub fn remaining_energy(initial_energy: i32, turns: i32) -> i32 {
let mut energy = initial_energy;
for _turn in 0..turns {
if energy > 0 {
energy -= 1;
}
}
energy
}
// Playground entry point for this example.
fn main() {
println!("{}", remaining_energy(3, 2));
println!("{}", remaining_energy(2, 5));
println!("{}", remaining_energy(4, 0));
}Resumen
letcrea variables inmutables por defecto;let mutpermite cambios explícitos.- Rust puede inferir tipos básicos, aunque una anotación como
: i32permite fijarlos. - Una función declara tipos para sus parámetros y retorno; su expresión final devuelve el valor.
ifexige una condición booleana y ejecuta exactamente una de sus ramas.forrecorre secuencias y rangos;..excluye el final y..=lo incluye.whilerepite según una condición yloopcontinúa hasta unbreak; se estudiarán en profundidad más adelante.