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 comrustc 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.