Tome decisiones y repita tareas

RustBeginner
Practicar Ahora

Introducción

Los programas resultan útiles cuando pueden elegir entre alternativas y repetir un cálculo para varios valores. Rust utiliza condiciones booleanas para tomar decisiones y bucles para repetir acciones de forma controlada.

En este laboratorio, completará cuatro partes pequeñas de un resumen de envíos preparado. En cada paso cambiará una sola expresión concreta: una comparación, los resultados de dos ramas, una expresión de total acumulado y una condición de aceptación.

Cree una comparación booleana

En este paso, comparará el peso de un paquete con un límite y almacenará el resultado, que será verdadero o falso.

Entre en el proyecto preparado y abra su archivo de código fuente:

cd /home/labex/project/shipping-summary
nano src/main.rs

El operador de comparación == comprueba si dos valores son iguales. Es diferente del signo = usado anteriormente para guardar o asignar un valor. La comparación inicial produce false porque 12 no es igual a 10. En este informe, un paquete es pesado cuando su peso es mayor que el límite.

En la línea del paso 1, reemplace únicamente == por el operador mayor que >:

    let is_heavy = package_weight > heavy_limit; // Step 1

La comparación produce el valor booleano true, que se almacena en is_heavy. Guarde con Ctrl+O, pulse Enter y salga con Ctrl+X. Ejecute el programa:

cargo run --quiet

Ahora, la primera línea debería ser:

Heavy package: true

Elija un valor con una expresión if

En este paso, utilizará una expresión if para elegir la etiqueta de envío.

Una expresión if comprueba una condición booleana. Cuando la condición es true, Rust evalúa el primer bloque; de lo contrario, evalúa el bloque else. En Rust, if puede ser una expresión que produce un valor. En este caso, ambas ramas producen texto, por lo que el texto seleccionado se puede asignar a shipping_label. Como toda la expresión if se convierte en un único valor almacenado, sus ramas deben producir tipos compatibles.

Abra el archivo:

nano src/main.rs

En la línea del paso 2, reemplace el primer "unknown" por "Freight" y el segundo por "Standard":

    let shipping_label = if is_heavy { "Freight" } else { "Standard" }; // Step 2

Rust no requiere paréntesis alrededor de la condición. Las llaves separan claramente los dos posibles resultados.

Guarde el archivo, salga y ejecute el informe:

cargo run --quiet

Como is_heavy es true, la segunda línea debería ser:

Shipping label: Freight

Sume valores con un bucle for

En este paso, utilizará un bucle for acotado y un rango inclusivo para crear un total acumulado.

El rango 3..=6 representa los números enteros desde 3 hasta 6, incluidos ambos extremos. Un bucle for toma cada valor de ese rango en orden y le asigna temporalmente el nombre weight dentro del cuerpo del bucle.

El valor mutable total_weight comienza en cero. En cada repetición, debe sumar el weight actual al total existente.

Abra el archivo y busque la línea del paso 3:

nano src/main.rs

Reemplace únicamente weight * 0 por weight:

        total_weight = total_weight + weight; // Step 3

Guarde el archivo y salga. Después, compruebe el código:

cargo check

Ejecute el informe:

cargo run --quiet

El bucle suma 3 + 4 + 5 + 6, por lo que debería ver:

Total weight: 18

Tome una decisión dentro de un bucle

En este paso, combinará la repetición con una decisión para contar los pedidos aceptados.

El segundo bucle también recorre los pesos del 3 al 6. Un pedido se acepta cuando su peso es menor o igual que 5. El operador <= significa menor o igual que.

Abra el archivo y busque la línea del paso 4:

nano src/main.rs

Reemplace la comparación temporal weight < 0 por:

        let is_accepted = weight <= 5; // Step 4

El if siguiente se utiliza como una instrucción: cuando is_accepted es true, su bloque incrementa el contador. No hay un bloque else porque los pedidos rechazados no requieren ninguna acción en este caso.

Guarde el archivo y salga. Después, ejecute el informe completo:

cargo run --quiet

Los pesos 3, 4 y 5 se aceptan, mientras que 6 no. El resultado final debería ser:

Heavy package: true
Shipping label: Freight
Total weight: 18
Accepted orders: 3

Resumen

Creó comparaciones booleanas, seleccionó un valor mediante una expresión if, repitió tareas con un bucle for y un rango inclusivo, mantuvo un total acumulado y colocó una decisión dentro de un bucle para contar los valores que cumplen una condición.