Panoramica sulle struct
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 21 di 66.
Ora che hai capito cosa sono le struct, impariamo a crearle e usarle concretamente. Questo comporta due passaggi: prima definire la struttura della struct, poi crearne delle istanze.
Per definire una struct, usi la parola chiave struct seguita dal nome della struct e dai suoi campi racchiusi tra parentesi graffe. Ogni campo ha un nome e un tipo:
struct User {
username: String,
active: bool,
}Questo crea un modello per una struct User con due campi: username di tipo String e active di tipo bool.
Convenzione di denominazione: i nomi delle struct in Rust dovrebbero usare PascalCase (detto anche UpperCamelCase), ovvero ogni parola inizia con una lettera maiuscola, ad esempio User, ProductItem o ShoppingCart. Rust ti avviserà se non segui questa convenzione.
Una volta definita una struct, puoi crearne istanze specificando i valori per ciascun campo:
let user1 = User {
username: String::from("alice"),
active: true,
};Nota che fornisci il nome della struct seguito da parentesi graffe contenenti il nome di ciascun campo, due punti e il relativo valore. L’ordine dei campi non deve necessariamente corrispondere all’ordine nella definizione.
Per accedere ai campi di un'istanza di struct, usa la notazione con il punto: scrivi il nome dell'istanza seguito da un punto e dal nome del campo:
println!("Username: {}", user1.username);
println!("Active: {}", user1.active);Qui, user1.username accede al campo username di user1 e user1.active accede al campo active. Puoi usare questi valori dei campi ovunque useresti una normale variabile.
Sfida
FacileRiceverai tre input: il nome di un prodotto, un prezzo (come numero decimale) e una quantità disponibile (come numero intero). Definisci una struct Product con tre campi: name di tipo String, price di tipo f64 e stock di tipo i32. Poi crea un'istanza di questa struct usando i valori di input e stampa le informazioni sul prodotto.
Requisiti:
- Definisci una struct
Productcon i campi:name: String,price: f64estock: i32 - Leggi il primo input come nome del prodotto
- Leggi il secondo input e convertilo in
f64per il prezzo - Leggi il terzo input e convertilo in
i32per la quantità disponibile - Crea un'istanza della struct
Productcon questi valori - Stampa le informazioni sul prodotto esattamente nel formato mostrato qui sotto
Input:
- Prima riga: nome del prodotto (ad es.,
Laptop) - Seconda riga: prezzo come numero decimale (ad es.,
999.99) - Terza riga: quantità disponibile come numero intero (ad es.,
15)
Output:
- Prima riga:
Product: [name] - Seconda riga:
Price: $[price] - Terza riga:
Stock: [quantity]
Provalo tu
use std::io;
// TODO: Definisci qui la struct Product
fn main() {
// Leggi il nome del prodotto
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
// Leggi il prezzo
let mut price_input = String::new();
io::stdin().read_line(&mut price_input).expect("Failed to read line");
let price: f64 = price_input.trim().parse().expect("Failed to parse price");
// Leggi la quantità in magazzino
let mut stock_input = String::new();
io::stdin().read_line(&mut stock_input).expect("Failed to read line");
let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
// TODO: Crea un'istanza della struct Product usando i valori di input
// TODO: Stampa le informazioni sul prodotto nel formato richiesto
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
L'espressione 'match'Corrispondenza di più valoriCorrispondenza di intervalliL'espressione 'if let'Cicli come espressioniRipasso - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi delle structStruct mutabiliStruct come parametri di funzioneStruct tuplaRiepilogo - Creare una struct Book2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreIterare su un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker dei punteggi di base5Coppie chiave-valore con mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriScorrere una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: inventario semplice degli articoli
Configurazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere tutto insieme3Lista di attività da riga di comando
Configurazione del progettoAggiungere un'attivitàVisualizzare tutte le attivitàRimuovere un'attivitàCodice finaleEsercitati da solo: Compilatore Rust online