Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 1 de 27/14 en el curso~12 min
Lecciones del módulo (1/2)

Definir e instanciar Structs

Las struct (o estructuras) en Rust son tipos de datos personalizados que te permiten agrupar múltiples valores relacionados. Son similares a los objetos o clases en otros lenguajes, pero sin herencia.

Definir una Struct

Para definir una struct, utilizamos la palabra clave struct seguida del nombre en PascalCase. En su interior definimos los nombres y los tipos de los campos:

Code
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

Crear una Instancia

Para utilizar una struct, debemos crear una instancia rellenando todos los campos especificados:

Code
fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    // Accesso ai campi tramite notazione con punto
    println!("L'utente {} è attivo? {}", user1.username, user1.active);
}

Mutabilidad de las Structs

En Rust, toda la instancia debe marcarse como mutable (mut) si deseas modificar cualquiera de sus campos. Rust no permite marcar solo algunos campos como mutables:

Code
fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    user1.active = false; // Valido perché user1 è mutabile!
}

Tuple Structs y Unit-Like Structs

Rust admite otros dos formatos de struct además de las clásicas structs con campos con nombre:

  1. Tuple Structs: Tienen un nombre asociado pero los campos no tienen nombres individuales, solo poseen el tipo. Son útiles para definir y diferenciar tipos específicos:
    Code
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
    
  2. Unit-Like Structs: No definen ningún campo. Se comportan como el tipo (). Resultan útiles cuando es necesario implementar comportamientos (traits) en un tipo sin almacenar datos en él.

Pruébalo tú

Ejercicio#rust.m4.l1.e1
Intentos: 0Cargando...

Define la struct User arriba del main con los campos: username (de tipo String) y active (de tipo bool).

Cargando editor...
Mostrar pista

Escribe `struct User { username: String, active: bool }`antes del`main`.

Solución disponible después de 3 intentos

Ejercicio#rust.m4.l1.e2
Intentos: 0Cargando...

Modifica user1 haciéndola mutable (let mut user1) y cambia el campo active a false antes de imprimir.

Cargando editor...
Mostrar pista

Agrega `mut`a`let user1`para que se convierta en`let mut user1`, luego inserta `user1.active = false;`.

Solución disponible después de 3 intentos

Ejercicio#rust.m4.l1.e3
Intentos: 0Cargando...

Define una tuple struct llamada Color que contenga tres campos enteros i32. En el main, instancia Color con los valores 255, 0 y 100 asignándola a la variable my_color, luego imprime su primer elemento (valor rojo) usando println!.

Cargando editor...
Mostrar pista

Define la tuple struct con `struct Color(i32, i32, i32);`. En el main, instánciala como `let my_color = Color(255, 0, 100);`e imprime el valor rojo con`my_color.0`.

Solución disponible después de 3 intentos