Estructuras (Structs)

Al igual que C y C++, Rust admite estructuras (struct) personalizadas:

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

fn main() {
    let mut peter = Person {
        name: String::from("Peter"),
        age: 27,
    };
    println!("{} is {} years old", peter.name, peter.age);
    
    peter.age = 28;
    println!("{} is {} years old", peter.name, peter.age);
    
    let jackie = Person {
        name: String::from("Jackie"),
        ..peter
    };
    println!("{} is {} years old", jackie.name, jackie.age);
}

Puntos Clave:

  • Las estructuras funcionan como en C o en C++.
    • Al igual que en C++, y a diferencia de C, no se necesita typedef para definir un tipo.
    • A diferencia de C++, no existe ninguna herencia entre las estructuras.
  • Los métodos están definidos en un bloque impl que veremos en las siguientes diapositivas.
  • Puede que sea un buen momento para indicar a los alumnos que existen diferentes tipos de estructuras.
    • Las estructuras de tamaño cero, como struct Foo;, se pueden utilizar al implementar un trait en algún tipo, pero no tienen ningún dato que te interese almacenar en el propio valor.
    • La siguiente diapositiva presentará las estructuras de tuplas, que se utilizan cuando los nombres de los campos no son importantes.
  • La sintaxis ..peter nos permite copiar la mayoría de los campos de la estructura anterior sin tener que escribirlos explícitamente. Siempre debe ser el último elemento.