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

  1. Definició del Struct: Utilitzem la paraula clau struct per definir un nou tipus de dades anomenat Persona. Aquest struct té tres camps: nom, edat i correu, cadascun amb el seu tipus específic (String i u32).

  2. 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.

  3. Accés als Camps: Per accedir als camps d'un struct, utilitzem la notació de punt (.). En l'exemple, estem imprimint els valors dels camps nom, edat i correu de persona1.

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

  1. Definició del Struct: Hem definit un struct anomenat Rectangle amb dos camps: width i height.

  2. Implementació de Funcions: Utilitzem el bloc impl per implementar funcions associades al struct Rectangle. En aquest cas, hem definit una funció area que calcula l'àrea del rectangle.

  3. Ú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.

© Copyright 2024. Tots els drets reservats