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.