Structs

Como C e C++, Rust tem suporte para structs personalizadas:

struct Pessoa {
    nome: String,
    idade: u8,
}

fn main() {
    let mut pedro = Pessoa {
        nome: String::from("Pedro"),
        idade: 27,
    };
    println!("{} tem {} anos.", pedro.nome, pedro.idade);
    
    pedro.idade= 28;
    println!("{} tem {} anos.", pedro.nome, pedro.idade);
    
    let jackie = Pessoa {
        nome: String::from("Jackie"),
        ..pedro
    };
    println!("{} tem {} anos.", jackie.nome, jackie.idade);
}

Pontos Chave:

  • Structs funcionam como em C ou C++.
    • Como em C++, e ao contrário de C, nenhum typedef é necessário para definir um tipo.
    • Ao contrário do C++, não há herança entre structs.
  • Os métodos são definidos em um bloco impl, que veremos nos próximos slides.
  • Este pode ser um bom momento para que as pessoas saibam que existem diferentes tipos de structs.
    • Structs de tamanho zero por exemplo, struct Foo; podem ser usadas ao implementar uma característica em algum tipo, mas não possuem nenhum dado que você deseja armazenar nelas.
    • O próximo slide apresentará as estruturas tuplas (Estruturas Tupla) usadas quando o nome dos campos não são importantes.
  • A sintaxe ..pedro permite copiar a maioria dos campos de uma struct sem precisar explicitar seus tipos. Sempre deve ser o último elemento.