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 anomenatRectangleamb dos camps:widthiheight, ambdós de tipusu32.let rect1 = Rectangle { width: 30, height: 50 }: Crea una instància deRectangleambwidthigual a 30 iheightigual 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.widthirect1.height: Accedeix als valors dels campswidthiheightde 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 campwidtha 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 structRectangleamb un mètodeareaque retorna l'àrea del rectangle.rect1.area(): Crida al mètodeareaper a la instànciarect1.
Exercicis Pràctics
Exercici 1: Crear i Utilitzar un Struct
- Defineix un struct anomenat
Circleamb un campradiusde tipusf64. - Crea una instància de
Circleamb un radi de 10.0. - Defineix un mètode
circumferenceper al structCircleque 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
Bookamb els campstitle,authoripagesde tipusString,Stringiu32respectivament. - Crea una instància mutable de
Bookamb 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.
