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:
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:
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:
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:
- 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); - 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ú
Define la struct User arriba del main con los campos: username (de tipo String) y active (de tipo bool).
Mostrar pista
Escribe `struct User { username: String, active: bool }`antes del`main`.
Solución disponible después de 3 intentos
Modifica user1 haciéndola mutable (let mut user1) y cambia el campo active a false antes de imprimir.
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
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!.
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