Enums

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

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

#[derive(Debug)]
enum MoedaJogada {
    Cara,
    Coroa,
}

fn jogar_moeda() -> MoedaJogada {
    let numero_aleatorio = gerar_numero_aleatorio();
    if numero_aleatorio % 2 == 0 {
        return MoedaJogada::Cara;
    } else {
        return MoedaJogada::Coroa;
    }
}

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

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.