En Rust, los structs (estructuras) son una forma de agrupar datos relacionados bajo un mismo nombre. Los structs son similares a las clases en otros lenguajes de programación, pero sin métodos asociados. En esta lección, aprenderemos cómo definir y usar structs en Rust.

¿Qué es un Struct?

Un struct es una colección de valores, cada uno de los cuales se llama campo. Los structs permiten agrupar datos que están relacionados lógicamente. Por ejemplo, podríamos tener un struct Usuario que agrupe información sobre un usuario, como su nombre, edad y dirección de correo electrónico.

Definiendo un Struct

Para definir un struct en Rust, utilizamos la palabra clave struct seguida del nombre del struct y una lista de campos entre llaves {}. Cada campo tiene un nombre y un tipo.

Ejemplo Básico

struct Usuario {
    nombre: String,
    edad: u32,
    email: String,
}

En este ejemplo, hemos definido un struct llamado Usuario con tres campos: nombre, edad y email.

Creando una Instancia de un Struct

Para crear una instancia de un struct, utilizamos la sintaxis de inicialización de struct, que consiste en el nombre del struct seguido de una lista de campos y valores entre llaves {}.

fn main() {
    let usuario1 = Usuario {
        nombre: String::from("Alice"),
        edad: 30,
        email: String::from("[email protected]"),
    };

    println!("Nombre: {}, Edad: {}, Email: {}", usuario1.nombre, usuario1.edad, usuario1.email);
}

Accediendo a los Campos de un Struct

Podemos acceder a los campos de un struct utilizando la notación de punto (.).

fn main() {
    let usuario1 = Usuario {
        nombre: String::from("Alice"),
        edad: 30,
        email: String::from("[email protected]"),
    };

    println!("Nombre: {}", usuario1.nombre);
    println!("Edad: {}", usuario1.edad);
    println!("Email: {}", usuario1.email);
}

Mutabilidad de los Campos

Para modificar los campos de un struct, necesitamos que la instancia del struct sea mutable. Utilizamos la palabra clave mut para hacer que una instancia sea mutable.

fn main() {
    let mut usuario1 = Usuario {
        nombre: String::from("Alice"),
        edad: 30,
        email: String::from("[email protected]"),
    };

    usuario1.edad = 31;
    println!("Edad actualizada: {}", usuario1.edad);
}

Ejercicio Práctico

Ejercicio 1: Definir y Usar un Struct

  1. Define un struct llamado Libro con los siguientes campos:

    • titulo de tipo String
    • autor de tipo String
    • paginas de tipo u32
  2. Crea una instancia de Libro y asigna valores a sus campos.

  3. Imprime los valores de los campos del struct Libro.

Solución

struct Libro {
    titulo: String,
    autor: String,
    paginas: u32,
}

fn main() {
    let libro1 = Libro {
        titulo: String::from("El Principito"),
        autor: String::from("Antoine de Saint-Exupéry"),
        paginas: 96,
    };

    println!("Título: {}", libro1.titulo);
    println!("Autor: {}", libro1.autor);
    println!("Páginas: {}", libro1.paginas);
}

Ejercicio 2: Modificar un Campo de un Struct

  1. Define un struct llamado Coche con los siguientes campos:

    • marca de tipo String
    • modelo de tipo String
    • kilometraje de tipo u32
  2. Crea una instancia mutable de Coche y asigna valores a sus campos.

  3. Modifica el campo kilometraje y luego imprime el valor actualizado.

Solución

struct Coche {
    marca: String,
    modelo: String,
    kilometraje: u32,
}

fn main() {
    let mut coche1 = Coche {
        marca: String::from("Toyota"),
        modelo: String::from("Corolla"),
        kilometraje: 50000,
    };

    coche1.kilometraje = 55000;
    println!("Kilometraje actualizado: {}", coche1.kilometraje);
}

Conclusión

En esta lección, hemos aprendido cómo definir y usar structs en Rust. Los structs son una herramienta poderosa para agrupar datos relacionados y hacer que nuestro código sea más organizado y legible. En la próxima lección, exploraremos cómo usar structs en combinación con otras características de Rust para crear programas más complejos y robustos.

© Copyright 2024. Todos los derechos reservados