Pular para o conteúdo principal
Módulo 2 · Lição 1 de 23/14 no curso~12 min
Lições do módulo (1/2)

Condicionais e Loops

O fluxo de controle no Rust gira em torno de duas construções principais: expressões condicionais para decidir qual caminho de execução seguir e construções de loop para repetir instruções.

Condicionais: if como uma expressão

Em Rust, a instrução if é uma expressão, o que significa que retorna um valor. Podemos usar if para atribuir diretamente um valor a uma variável:

Rust
let condition = true;
let number = if condition { 5 } else { 6 }; // if/else as an expression

Loops e Iterações

Rust fornece três tipos de loops nativos: loop, while e for.

1. loop (Loop Infinito)

A palavra-chave loop cria um loop infinito que continua até que você diga explicitamente para parar de usar break:

Rust
let mut count = 0;
loop {
    count += 1;
    if count == 10 {
        break; // Exit the loop
    }
}

Além disso, você pode retornar um valor de loop colocando-o logo após break:

Rust
let result = loop {
    count += 1;
    if count == 10 {
        break count * 2; // Returns 20
    }
};

2. while (Loop Condicional)

Executa um bloco de código enquanto uma condição booleana permanecer verdadeira:

Rust
let mut number = 3;
while number != 0 {
    println!("{}!", number);
    number -= 1;
}

3. for (Iteração sobre coleções e intervalos)

O loop for é a ferramenta mais comum e segura para iterar elementos em uma coleção ou intervalo de números:

Rust
// Iterates over numbers 1 through 3 (excluding 4)
for number in 1..4 {
    println!("Valore: {}", number);
}

// Iterates including the right boundary using '='
for number in 1..=3 {
    println!("Valore: {}", number); // Prints 1, 2 and 3
}

Etiquetas de loop

Ao lidar com loops aninhados, as instruções break e continue se aplicam ao loop mais interno por padrão. Rust permite que você use um rótulo de loop (escrito como 'label_name:) para encerrar ou continuar explicitamente um loop externo:

Rust
let mut count = 0;
'outer: loop {
    loop {
        if count == 5 {
            break 'outer; // Exits the outer loop directly
        }
        count += 1;
    }
}

Experimente você mesmo

Exercício#rust.m2.l1.e1
Tentativas: 0Carregando…

Declare uma variável chamada número com um valor de 7. Em seguida, use uma expressão if/else para atribuir o valor 'maior' à variável mensagem se o número for maior que 5, ou 'menor' caso contrário. Finalmente, imprima a mensagem usando println!.

Carregando editor…
Mostrar dica

Escreva `let message = if number > 5 { 'greater' } else { 'smaller' };` e passe para `println!`.

Solução disponível após 3 tentativas

Exercício#rust.m2.l1.e2
Tentativas: 0Carregando…

Escreva um loop for que imprima os números de 1 a 5 inclusive (ou seja, 1, 2, 3, 4, 5) usando println! em cada iteração.

Carregando editor…
Mostrar dica

Use a sintaxe de intervalo inclusivo `for i in 1..=5` e execute `println!('{}', i);` dentro do bloco.

Solução disponível após 3 tentativas

Exercício#rust.m2.l1.e3
Tentativas: 0Carregando…

Escreva um loop que incremente um contador de variável mutável começando em 0. Quando o contador atingir 10, saia do loop retornando o contador multiplicado por 5 usando a instrução break para atribuir esse valor a um resultado de variável imutável. Finalmente, imprima o resultado.

Carregando editor…
Mostrar dica

Use `deixe resultado = loop { ... };`. Dentro do loop incremente `counter` e adicione a condição `if counter == 10 { break counter * 5; }`.

Solução disponível após 3 tentativas