En aquest tema, aprendrem com utilitzar structs en Rust per emmagatzemar dades relacionades i treballar amb elles de manera eficient. Els structs són una manera de crear tipus de dades personalitzats que agrupen diversos valors sota un mateix nom.
Contingut
Creació d'Instàncies de Structs
Per crear una instància d'un struct, primer hem de definir el struct. Aquí tenim un exemple d'un struct Rectangle
:
Ara podem crear una instància de Rectangle
:
fn main() { let rect1 = Rectangle { width: 30, height: 50, }; println!("Rectangle: {} x {}", rect1.width, rect1.height); }
Explicació
struct Rectangle { width: u32, height: u32 }
: Defineix un struct anomenatRectangle
amb dos camps:width
iheight
, ambdós de tipusu32
.let rect1 = Rectangle { width: 30, height: 50 }
: Crea una instància deRectangle
ambwidth
igual a 30 iheight
igual a 50.
Accés als Camps d'un Struct
Podem accedir als camps d'un struct utilitzant la notació de punt (.
):
fn main() { let rect1 = Rectangle { width: 30, height: 50, }; println!("Width: {}", rect1.width); println!("Height: {}", rect1.height); }
Explicació
rect1.width
irect1.height
: Accedeix als valors dels campswidth
iheight
de la instànciarect1
.
Actualització de Valors en un Struct
Podem actualitzar els valors dels camps d'un struct si la instància és mutable:
fn main() { let mut rect1 = Rectangle { width: 30, height: 50, }; rect1.width = 40; println!("Updated width: {}", rect1.width); }
Explicació
let mut rect1 = Rectangle { width: 30, height: 50 }
: Crea una instància mutable deRectangle
.rect1.width = 40
: Actualitza el valor del campwidth
a 40.
Funcions Associades a Structs
Podem definir funcions associades a un struct utilitzant la paraula clau impl
. Aquestes funcions poden ser mètodes que operen sobre instàncies del struct.
struct Rectangle { width: u32, height: u32, } impl Rectangle { fn area(&self) -> u32 { self.width * self.height } } fn main() { let rect1 = Rectangle { width: 30, height: 50, }; println!("Area: {}", rect1.area()); }
Explicació
impl Rectangle { fn area(&self) -> u32 { self.width * self.height } }
: Defineix una implementació per al structRectangle
amb un mètodearea
que retorna l'àrea del rectangle.rect1.area()
: Crida al mètodearea
per a la instànciarect1
.
Exercicis Pràctics
Exercici 1: Crear i Utilitzar un Struct
- Defineix un struct anomenat
Circle
amb un campradius
de tipusf64
. - Crea una instància de
Circle
amb un radi de 10.0. - Defineix un mètode
circumference
per al structCircle
que calculi la circumferència del cercle. - Imprimeix la circumferència del cercle.
Solució
struct Circle { radius: f64, } impl Circle { fn circumference(&self) -> f64 { 2.0 * std::f64::consts::PI * self.radius } } fn main() { let circle = Circle { radius: 10.0 }; println!("Circumference: {}", circle.circumference()); }
Exercici 2: Actualitzar un Struct
- Defineix un struct anomenat
Book
amb els campstitle
,author
ipages
de tipusString
,String
iu32
respectivament. - Crea una instància mutable de
Book
amb valors inicials. - Actualitza el nombre de pàgines del llibre.
- Imprimeix els detalls del llibre actualitzat.
Solució
struct Book { title: String, author: String, pages: u32, } fn main() { let mut book = Book { title: String::from("The Rust Programming Language"), author: String::from("Steve Klabnik and Carol Nichols"), pages: 500, }; book.pages = 550; println!("Title: {}, Author: {}, Pages: {}", book.title, book.author, book.pages); }
Conclusió
En aquesta secció, hem après com crear i utilitzar structs en Rust. Hem vist com definir structs, crear instàncies, accedir i actualitzar els seus camps, i definir funcions associades. Els exercicis pràctics ens han ajudat a consolidar aquests conceptes. En el proper tema, explorarem els enums i la coincidència de patrons, que ens permetran treballar amb dades més complexes de manera eficient.