En aquest tema, aprendrem què són els structs en Rust, com definir-los i com utilitzar-los en els nostres programes. Els structs són una manera de crear tipus de dades personalitzats que poden agrupar diversos valors sota un mateix nom. Això és especialment útil per representar entitats complexes amb múltiples atributs.
Què és un Struct?
Un struct (abreviatura de "structure") és una col·lecció de camps, on cada camp té un nom i un tipus. Els structs ens permeten agrupar dades relacionades en una sola unitat.
Exemple Bàsic
Vegem un exemple bàsic de com definir i utilitzar un struct en Rust:
// Definició d'un struct anomenat `Persona`
struct Persona {
nom: String,
edat: u32,
correu: String,
}
fn main() {
// Creació d'una instància del struct `Persona`
let persona1 = Persona {
nom: String::from("Joan"),
edat: 30,
correu: String::from("joan@example.com"),
};
// Accés als camps del struct
println!("Nom: {}", persona1.nom);
println!("Edat: {}", persona1.edat);
println!("Correu: {}", persona1.correu);
}Explicació del Codi
-
Definició del Struct: Utilitzem la paraula clau
structper definir un nou tipus de dades anomenatPersona. Aquest struct té tres camps:nom,edaticorreu, cadascun amb el seu tipus específic (Stringiu32). -
Creació d'una Instància: Per crear una instància del struct
Persona, utilitzem la sintaxi{}i especifiquem els valors per a cada camp. En aquest cas, estem creant una persona anomenada "Joan" de 30 anys amb un correu electrònic específic. -
Accés als Camps: Per accedir als camps d'un struct, utilitzem la notació de punt (
.). En l'exemple, estem imprimint els valors dels campsnom,edaticorreudepersona1.
Definició de Structs amb Funcions
Podem definir funcions associades als structs per encapsular comportaments específics. Vegem com fer-ho:
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
// Funció per calcular l'àrea del rectangle
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let rect = Rectangle {
width: 30,
height: 50,
};
println!("L'àrea del rectangle és: {}", rect.area());
}Explicació del Codi
-
Definició del Struct: Hem definit un struct anomenat
Rectangleamb dos camps:widthiheight. -
Implementació de Funcions: Utilitzem el bloc
implper implementar funcions associades al structRectangle. En aquest cas, hem definit una funcióareaque calcula l'àrea del rectangle. -
Ús de la Funció: Creem una instància de
Rectanglei cridem la funcióareaper obtenir l'àrea del rectangle.
Exercicis Pràctics
Exercici 1: Definir un Struct
Defineix un struct anomenat Cotxe amb els següents camps:
marca:Stringmodel:Stringany:u32
Crea una instància de Cotxe i imprimeix els valors dels seus camps.
Solució
struct Cotxe {
marca: String,
model: String,
any: u32,
}
fn main() {
let cotxe1 = Cotxe {
marca: String::from("Toyota"),
model: String::from("Corolla"),
any: 2020,
};
println!("Marca: {}", cotxe1.marca);
println!("Model: {}", cotxe1.model);
println!("Any: {}", cotxe1.any);
}Exercici 2: Funció Associada a un Struct
Defineix un struct anomenat Cercle amb un camp radi de tipus f64. Implementa una funció associada anomenada area que calculi l'àrea del cercle (π * radi^2).
Solució
struct Cercle {
radi: f64,
}
impl Cercle {
fn area(&self) -> f64 {
std::f64::consts::PI * self.radi * self.radi
}
}
fn main() {
let cercle = Cercle { radi: 5.0 };
println!("L'àrea del cercle és: {}", cercle.area());
}Conclusió
En aquesta secció, hem après què són els structs en Rust, com definir-los i com utilitzar-los en els nostres programes. També hem vist com podem associar funcions als structs per encapsular comportaments específics. Els structs són una eina poderosa per organitzar i gestionar dades complexes en Rust. En la següent secció, explorarem com utilitzar structs en combinació amb altres característiques de Rust per crear programes més robustos i eficients.
