Enums

A palavra-chave enum permite a criação de um tipo que possui algumas variantes diferentes:

fn generate_random_number() -> i32 {
    // Implementação baseada em https://xkcd.com/221/
    4  // Escolhido por uma rolagem de dados justa. Garantido ser aleatĂłrio.
}

#[derive(Debug)]
enum CoinFlip {
    Heads,
    Tails,
}

fn flip_coin() -> CoinFlip {
    let random_number = generate_random_number();
    if random_number % 2 == 0 {
        return CoinFlip::Heads;
    } else {
        return CoinFlip::Tails;
    }
}

fn main() {
    println!("VocĂȘ tirou: {:?}", flip_coin());
}

Pontos Chave:

  • EnumeraçÔes permitem coletar um conjunto de valores em um tipo
  • Esta pĂĄgina oferece um tipo de enum MoedaJogada com duas variantes Cara e Coroa. VocĂȘ pode observar o namespace ao usar variantes.
  • Este pode ser um bom momento para comparar Structs e Enums:
    • Em ambos, vocĂȘ pode ter uma versĂŁo simples sem campos (unit struct, ou estrutura unitĂĄria) ou uma com diferentes tipos de campo.
    • Em ambos, as funçÔes associadas sĂŁo definidas dentro de um bloco impl.
    • VocĂȘ pode atĂ© mesmo implementar as diferentes variantes de uma Enum com Structs separadas, mas elas nĂŁo seriam do mesmo tipo, como seriam se todas fossem definidas em uma Enum.