Iteração Concisa de Opções em Rust com While Let

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, a utilização de while let em Rust é demonstrado como uma alternativa mais concisa e eficiente ao uso de sequências match quando se incrementa variáveis ou se itera sobre tipos Option.

Nota: Se o laboratório não especificar um nome de arquivo, você pode usar qualquer nome de arquivo que desejar. Por exemplo, você pode usar main.rs, compilar e executar com rustc main.rs && ./main.

while let

Similar a if let, while let pode tornar sequências match incômodas mais toleráveis. Considere a seguinte sequência que incrementa i:

// Crie `optional` do tipo `Option<i32>`
let mut optional = Some(0);

// Tente este teste repetidamente.
loop {
    match optional {
        // Se `optional` desestruturar, avalie o bloco.
        Some(i) => {
            if i > 9 {
                println!("Maior que 9, pare!");
                optional = None;
            } else {
                println!("`i` é `{:?}`. Tente novamente.", i);
                optional = Some(i + 1);
            }
            // ^ Requer 3 níveis de indentação!
        },
        // Pare o loop quando a desestruturação falhar:
        _ => { break; }
        // ^ Por que isso é necessário? Deve haver uma maneira melhor!
    }
}

Usando while let, esta sequência fica muito melhor:

fn main() {
    // Crie `optional` do tipo `Option<i32>`
    let mut optional = Some(0);

    // Isso lê: "enquanto `let` desestruturar `optional` em
    // `Some(i)`, avalie o bloco (`{}`). Caso contrário, `break`.
    while let Some(i) = optional {
        if i > 9 {
            println!("Maior que 9, pare!");
            optional = None;
        } else {
            println!("`i` é `{:?}`. Tente novamente.", i);
            optional = Some(i + 1);
        }
        // ^ Menos desvio para a direita e não requer
        // o tratamento explícito do caso de falha.
    }
    // ^ `if let` tinha cláusulas opcionais adicionais `else`/`else if`. `while let` não tem essas.
}

Resumo

Parabéns! Você concluiu o laboratório While Let. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.