Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 1 de 27/14 en el curso~12 min
Lecciones del módulo (1/2)

Definire e istanziare Struct

Le struct (o strutture) in Rust sono tipi di dati personalizzati che ti consentono di raggruppare insieme più valori correlati. Sono simili agli oggetti o classi in altri linguaggi, ma senza ereditarietà.

Definire una Struct

Per definire una struct, utilizziamo la parola chiave struct seguita dal nome in PascalCase. All'interno definiamo i nomi e i tipi dei campi:

Code
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

Creare un'Istanza

Per utilizzare una struct, dobbiamo creare un'istanza compilando tutti i campi specificati:

Code
fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    // Accesso ai campi tramite notazione con punto
    println!("L'utente {} è attivo? {}", user1.username, user1.active);
}

Mutabilità delle Struct

In Rust, l'intera istanza deve essere marcata come mutabile (mut) se desideri modificare uno qualsiasi dei suoi campi. Rust non consente di marcare solo alcuni campi come mutabili:

Code
fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    user1.active = false; // Valido perché user1 è mutabile!
}

Tuple Structs e Unit-Like Structs

Rust supporta altri due formati di struct oltre alle classiche struct a campi nominati:

  1. Tuple Structs: Hanno un nome associato ma i campi non hanno nomi individuali, possiedono solo il tipo. Sono utili per definire e differenziare tipi specifici:
    Code
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
    
  2. Unit-Like Structs: Non definiscono alcun campo. Si comportano come il tipo (). Risultano utili quando occorre implementare dei comportamenti (trait) su un tipo senza memorizzarvi dati.

Prova tu

Ejercicio#rust.m4.l1.e1
Intentos: 0Cargando...

Definisci la struct User sopra il main con i campi: username (di tipo String) e active (di tipo bool).

Cargando editor...
Mostrar pista

Scrivi `struct User { username: String, active: bool }`prima del`main`.

Solución disponible después de 3 intentos

Ejercicio#rust.m4.l1.e2
Intentos: 0Cargando...

Modifica user1 rendendola mutabile (let mut user1) e cambia il campo active a false prima della stampa.

Cargando editor...
Mostrar pista

Aggiungi `mut`a`let user1`per farla diventare`let mut user1`, poi inserisci `user1.active = false;`.

Solución disponible después de 3 intentos

Ejercicio#rust.m4.l1.e3
Intentos: 0Cargando...

Definisci una tuple struct chiamata Color contenente tre campi interi i32. Nel main, istanzia Color con i valori 255, 0 e 100 assegnandola alla variabile my_color, quindi stampane il primo elemento (valore rosso) usando println!.

Cargando editor...
Mostrar pista

Definisci la tuple struct con `struct Color(i32, i32, i32);`. Nel main, istanziala come `let my_color = Color(255, 0, 100);`e stampa il valore rosso con`my_color.0`.

Solución disponible después de 3 intentos