Structs (Estruturas) Nomeadas

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

struct Person {
    name: String,
    age: u8,
}

fn describe(person: &Person) {
    println!("{} tem {} anos.", person.name, person.age);
}

fn main() {
    let mut peter = Person { name: String::from("Peter"), age: 27 };
    describe(&peter);

    peter.age = 28;
    describe(&peter);

    let name = String::from("Avery");
    let age = 39;
    let avery = Person { name, age };
    describe(&avery);

    let jackie = Person { name: String::from("Jackie"), ..avery };
    describe(&jackie);
}
This slide should take about 10 minutes.

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.
  • 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 um trait em algum tipo, mas não possuem nenhum dado que você deseja armazenar nelas.
    • O próximo slide apresentará as structs de tuplas usadas quando o nome dos campos não são importantes.
  • Se você já tiver variáveis com os nomes corretos, poderá criar a struct usando uma abreviação.
  • A sintaxe ..avery permite copiar a maioria dos campos de uma struct sem precisar explicitar seus tipos. Ela deve ser sempre o último elemento.