Tome decisões e repita tarefas

RustBeginner
Pratique Agora

Introdução

Os programas se tornam úteis quando conseguem escolher entre alternativas e repetir um cálculo para vários valores. O Rust usa condições booleanas para tomar decisões e loops para repetir operações de forma controlada.

Neste laboratório, você vai concluir quatro pequenas partes de um resumo de remessas já preparado. Em cada etapa, apenas uma expressão específica será alterada: uma comparação, os resultados de dois ramos, uma expressão de total acumulado e uma condição de aceitação.

Crie uma comparação booleana

Nesta etapa, você vai comparar o peso de um pacote com um limite e armazenar o resultado, que será verdadeiro ou falso.

Entre no projeto preparado e abra o arquivo-fonte:

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

O operador de comparação == verifica se dois valores são iguais. Ele é diferente do sinal único =, usado anteriormente para armazenar ou atribuir um valor. A comparação inicial resulta em falso porque 12 não é igual a 10. Para o relatório, um pacote é pesado quando seu peso é maior que o limite.

Na linha da Etapa 1, substitua somente == pelo operador de maior que >:

    let is_heavy = package_weight > heavy_limit; // Step 1

A comparação produz o valor booleano true, que é armazenado em is_heavy. Salve com Ctrl+O, pressione Enter e saia com Ctrl+X. Execute o programa:

cargo run --quiet

A primeira linha agora deve ser:

Heavy package: true

Escolha um valor com uma expressão if

Nesta etapa, você vai usar uma expressão if para escolher a etiqueta de envio.

Um if verifica uma condição booleana. Quando a condição é true, o Rust avalia o primeiro bloco; caso contrário, avalia o bloco else. No Rust, if pode ser uma expressão que produz um valor. Como os dois ramos produzem texto, o texto selecionado pode ser atribuído a shipping_label. Como o if inteiro se torna um único valor armazenado, os ramos precisam produzir tipos compatíveis.

Abra o arquivo:

nano src/main.rs

Na linha da Etapa 2, substitua o primeiro "unknown" por "Freight" e o segundo por "Standard":

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

O Rust não exige parênteses ao redor da condição. As chaves separam claramente os dois resultados possíveis.

Salve, saia e execute o relatório:

cargo run --quiet

Como is_heavy é true, a segunda linha deve ser:

Shipping label: Freight

Some valores com um loop for

Nesta etapa, você vai usar um loop for limitado e um intervalo inclusivo para criar um total acumulado.

O intervalo 3..=6 representa os números inteiros de 3 a 6, incluindo os dois extremos. Um loop for obtém cada valor desse intervalo na ordem e o chama temporariamente de weight dentro do corpo do loop.

A variável mutável total_weight começa em zero. A cada repetição, o valor atual de weight deve ser adicionado ao total existente.

Abra o arquivo e localize a linha da Etapa 3:

nano src/main.rs

Substitua somente weight * 0 por weight:

        total_weight = total_weight + weight; // Step 3

Salve e saia. Em seguida, verifique o código:

cargo check

Execute o relatório:

cargo run --quiet

O loop soma 3 + 4 + 5 + 6, portanto você deve ver:

Total weight: 18

Tome uma decisão dentro de um loop

Nesta etapa, você vai combinar repetição e decisão para contar os pedidos aceitos.

O segundo loop também percorre os pesos de 3 a 6. Um pedido é aceito quando seu peso é menor ou igual a 5. O operador <= significa menor ou igual a.

Abra o arquivo e localize a linha da Etapa 4:

nano src/main.rs

Substitua a comparação temporária weight < 0 por:

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

O if seguinte é usado como uma instrução: quando is_accepted é true, o bloco incrementa o contador. Não há else porque, neste caso, os pedidos rejeitados não exigem nenhuma ação.

Salve e saia. Em seguida, execute o relatório concluído:

cargo run --quiet

Os pesos 3, 4 e 5 são aceitos, enquanto 6 não é. A saída final deve ser:

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

Resumo

Você criou comparações booleanas, selecionou um valor com uma expressão if, repetiu tarefas com um loop for e um intervalo inclusivo, manteve um total acumulado e colocou uma decisão dentro de um loop para contar os valores correspondentes.