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.
  • The syntax ..avery allows us to copy the majority of the fields from the old struct without having to explicitly type it all out. It must always be the last element.