Struct come parametri di funzione
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 24 di 66.
Ora che sai come creare e modificare le struct, scopriamo come usarle con le funzioni. Proprio come qualsiasi altro tipo di dato in Rust, puoi passare istanze di struct alle funzioni e restituirle dalle funzioni.
Per passare una struct a una funzione, ti basta includerla come parametro nella definizione della funzione:
fn calculate_area(rect: Rectangle) -> i32 {
rect.width * rect.height
}Questa funzione accetta una struct Rectangle come parametro e restituisce un i32. All'interno della funzione, puoi accedere ai campi della struct usando la notazione con il punto, proprio come faresti in qualsiasi altro contesto.
Puoi anche restituire strutture dalle funzioni specificando il tipo della struttura come tipo restituito:
fn create_square(size: i32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}Usare le struct con le funzioni rende il tuo codice più organizzato e significativo. Invece di passare più parametri singoli, puoi raggruppare i dati correlati e passarli come un'unica unità ben definita.
Sfida
FacileRiceverai quattro input: la larghezza di un rettangolo (come intero), l'altezza di un rettangolo (come intero), la lunghezza del lato di un quadrato (come intero) e un numero di scelta (1 o 2). Definisci una struct Rectangle con due campi: width: i32 e height: i32. Crea due funzioni: una che accetta un Rectangle e ne calcola l'area, e un'altra che accetta la lunghezza di un lato e restituisce un Rectangle che rappresenta un quadrato. In base all'input della scelta, calcola e stampa l'area appropriata.
Requisiti:
- Definisci una struct
Rectanglecon i campi:width: i32eheight: i32 - Crea una funzione
calculate_areache accetta unRectanglecome parametro e restituisce uni32(l'area) - Crea una funzione
create_squareche accetta uni32(la lunghezza del lato) come parametro e restituisce unRectanglecon larghezza e altezza uguali - Leggi il primo input e convertilo in
i32per la larghezza del rettangolo - Leggi il secondo input e convertilo in
i32per l'altezza del rettangolo - Crea un'istanza di
Rectanglecon queste dimensioni - Leggi il terzo input e convertilo in
i32per la lunghezza del lato del quadrato - Leggi il quarto input e convertilo in
i32per la scelta (1 o 2) - Se la scelta è 1: calcola e stampa l'area del rettangolo
- Se la scelta è 2: crea un quadrato usando
create_square, poi calcolane e stampane l'area
Input:
- Prima riga: larghezza del rettangolo come intero (ad es.,
8) - Seconda riga: altezza del rettangolo come intero (ad es.,
5) - Terza riga: lunghezza del lato del quadrato come intero (ad es.,
6) - Quarta riga: scelta come intero, 1 o 2 (ad es.,
1)
Output:
- Se la scelta è 1:
Rectangle area: [area] - Se la scelta è 2:
Square area: [area]
Provalo tu
use std::io;
// TODO: Definisci qui la struct Rectangle
// TODO: Definisci qui la funzione calculate_area
// TODO: Definisci qui la funzione create_square
fn main() {
// Leggi la larghezza del rettangolo
let mut width_input = String::new();
io::stdin().read_line(&mut width_input).expect("Failed to read line");
let width: i32 = width_input.trim().parse().expect("Invalid input");
// Leggi l'altezza del rettangolo
let mut height_input = String::new();
io::stdin().read_line(&mut height_input).expect("Failed to read line");
let height: i32 = height_input.trim().parse().expect("Invalid input");
// Leggi la lunghezza del lato del quadrato
let mut side_input = String::new();
io::stdin().read_line(&mut side_input).expect("Failed to read line");
let side: i32 = side_input.trim().parse().expect("Invalid input");
// Leggi la scelta
let mut choice_input = String::new();
io::stdin().read_line(&mut choice_input).expect("Failed to read line");
let choice: i32 = choice_input.trim().parse().expect("Invalid input");
// TODO: Scrivi il tuo codice qui sotto
// Crea un'istanza di Rectangle, verifica la scelta e calcola l'area appropriata
// Stampa il risultato in base alla scelta
// Usa: println!("Rectangle area: {}", area); oppure println!("Square area: {}", area);
}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