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("[email protected]"), }; // 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
struct
per definir un nou tipus de dades anomenatPersona
. Aquest struct té tres camps:nom
,edat
icorreu
, cadascun amb el seu tipus específic (String
iu32
). -
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
,edat
icorreu
depersona1
.
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
Rectangle
amb dos camps:width
iheight
. -
Implementació de Funcions: Utilitzem el bloc
impl
per implementar funcions associades al structRectangle
. En aquest cas, hem definit una funcióarea
que calcula l'àrea del rectangle. -
Ús de la Funció: Creem una instància de
Rectangle
i cridem la funcióarea
per obtenir l'àrea del rectangle.
Exercicis Pràctics
Exercici 1: Definir un Struct
Defineix un struct anomenat Cotxe
amb els següents camps:
marca
:String
model
:String
any
: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.