Structs

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

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

fn main() {
    let mut peter = Person {
        name: String::from("Pedro"),
        age: 27,
    };
    println!("{} tem {} anos.", peter.name, peter.age);
    
    peter.age = 28;
    println!("{} tem {} anos.", peter.name, peter.age);
    
    let jackie = Person {
        name: String::from("Jackie"),
        ..peter
    };
    println!("{} tem {} anos.", jackie.name, jackie.age);
}

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.