Definire e utilizzare le struct
Crei strutture di dati personalizzate con le struct, incluse le tuple struct e le struct simili a unità, per raggruppare dati correlati.
Definire e utilizzare le struct è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 1 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 3 lezioni in totale.
Le struct: tipi di dati personalizzati
In Rust, le struct (abbreviazione di structures) consentono di creare tipi di dati personalizzati, dando un nome a più valori correlati e raggruppandoli in un insieme significativo.
Consideri una struct come il progetto di un utente, di un colore o di un punto nello spazio. Invece di avere variabili separate per il nome, l'e-mail e l'età di un utente, può inserirle tutte in una struct User.
Questo aiuta a organizzare logicamente i dati e rende il codice più facile da leggere e mantenere.
Definire una struct classica
Il tipo di struct più comune è la struct classica, in cui si assegna un nome a ogni dato, chiamato campo. Ecco come definirne una:
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
// This code only defines the struct blueprint.
// No actual user has been created yet!
println!("Struct 'User' blueprint defined.");
}Creare istanze di struct
Dopo aver definito una struct, è possibile crearne istanze concrete. Ogni istanza contiene valori specifici per i propri campi. Per creare un'istanza, si specificano valori concreti per ogni campo.
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
println!("User instance created!");
}Accedere ai campi di una struct
Per estrarre dati da un'istanza di struct, si usa la notazione con il punto. È sufficiente scrivere il nome dell'istanza, un punto (.) e quindi il nome del campo.
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
println!("User's username: {}", user1.username);
println!("User's email: {}", user1.email);
}Mutabilità con le struct
Come le normali variabili, anche le intere istanze di struct possono essere rese mutabili usando la parola chiave mut. Se un'istanza è mutabile, è possibile modificare tutti i suoi campi.
Non è possibile rendere mutabili solo alcuni campi: la mutabilità si applica all'intera istanza della struct.
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
println!("Old email: {}", user1.email);
user1.email = String::from("new_alice@example.com");
println!("New email: {}", user1.email);
}Tuple struct: campi senza nome
Le tuple struct sono un'altra forma di struct: hanno l'aspetto delle tuple, ma possiedono un nome. Sono utili quando si vuole assegnare a una tupla un nome di tipo distinto, senza dover dare un nome ai singoli campi.
Ad esempio, Color(i32, i32, i32) è una tupla denominata che raggruppa tre numeri interi.
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);
fn main() {
let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);
println!("Tuple structs 'Color' and 'Point' defined.");
}Usare le tuple struct
Creare un'istanza di una tuple struct è simile a creare una tupla normale. Per accedere ai valori al suo interno, si usa la notazione con il punto insieme al relativo indice, iniziando da 0.
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);
fn main() {
let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);
println!("Black color: R={}, G={}, B={}", black.0, black.1, black.2);
println!("Origin point: X={}, Y={}, Z={}", origin.0, origin.1, origin.2);
}Struct simili a unità: marker
È anche possibile definire struct che non hanno alcun campo. Sono chiamate struct simili a unità perché si comportano in modo analogo al tipo unità ().
Vengono spesso usate come marker per implementare un determinato trait su un tipo, quando i dati in sé non sono importanti.
struct AlwaysTrue;
fn main() {
let subject = AlwaysTrue;
// Unit-like structs don't store data directly,
// but they can be instantiated and used as types.
println!("Unit-like struct 'AlwaysTrue' created.");
}Sintassi di aggiornamento delle struct
Se è necessario creare una nuova istanza di struct basata su una già esistente, modificando però solo alcuni valori dei campi, Rust offre una comoda sintassi di aggiornamento delle struct (..).
Questa sintassi sposta i campi rimanenti dall'istanza specificata, quindi l'istanza originale non può più essere usata se contiene campi che implementano Copy.
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
let user2 = User {
email: String::from("bob@example.com"),
username: String::from("bob456"),
..user1 // Copy remaining fields from user1
};
println!("User 2 email: {}", user2.email);
println!("User 2 active: {}", user2.active);
// user1.username is now moved, so user1 can't be used here.
}Quiz sulle struct
Verifichi la sua comprensione delle struct di Rust.
Riepilogo: panoramica delle struct
Ha imparato a definire e usare le struct in Rust!
- Le struct classiche raggruppano campi denominati per creare tipi di dati personalizzati.
- Le tuple struct sono tuple denominate, utili quando i nomi dei campi non sono strettamente necessari.
- Le struct simili a unità non hanno campi e fungono da marker.
- Le istanze di struct possono essere rese
mutper consentire la modifica dei campi. - La sintassi
..aiuta a creare nuove istanze a partire da quelle esistenti.
Le struct sono fondamentali per organizzare i dati correlati nei programmi Rust, rendendo il codice più strutturato e leggibile.
Domande Frequenti
La lezione «Definire e utilizzare le struct» è gratuita?
Sì — il testo completo di «Definire e utilizzare le struct» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 3 lezioni in totale.
Cosa imparerò in «Definire e utilizzare le struct»?
Crei strutture di dati personalizzate con le struct, incluse le tuple struct e le struct simili a unità, per raggruppare dati correlati. Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn Rust Coding?
Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 3.
Quanto tempo richiede la lezione «Definire e utilizzare le struct»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?
Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Definire e utilizzare le struct
- Enum per tipi personalizzati
- Pattern matching avanzato