Slice come parametri di funzione
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 56 di 66.
Quando scrivi funzioni che lavorano con le stringhe, usare &str come tipo di parametro invece di String rende le tue funzioni molto più flessibili e utili.
Una funzione che accetta un parametro String può accettare solo stringhe di proprietà, il che limita il modo in cui puoi chiamarla:
fn print_message(text: String) {
println!("{}", text);
}
// Funziona, ma acquisisce la proprietà
let my_string = String::from("Hello");
print_message(my_string); // my_string non è più utilizzabile dopo questa operazioneTuttavia, una funzione che accetta &str può accettare sia riferimenti a String sia stringhe letterali, rendendola molto più versatile:
fn print_message(text: &str) {
println!("{}", text);
}
// Ora puoi chiamarla con entrambi i tipi
let my_string = String::from("Hello");
print_message(&my_string); // Passa un riferimento a String
print_message("World"); // Passa direttamente una stringa letteraleQuesta flessibilità significa che le tue funzioni funzionano in più situazioni senza costringere chi le chiama a convertire i propri dati o a rinunciare alla loro proprietà.
Sfida
FacileRiceverai due input. Il primo input è un messaggio di testo e il secondo è la lunghezza massima consentita per il messaggio. Crea una funzione chiamata truncate_message che accetti come parametri una porzione di stringa (&str) e una lunghezza massima (usize). Se la lunghezza del messaggio supera il massimo, la funzione deve restituire una porzione del messaggio fino alla lunghezza massima. Altrimenti, deve restituire l'intero messaggio. Stampa il risultato.
Requisiti:
- Leggi il primo input (il messaggio di testo) e rimuovi gli spazi bianchi
- Leggi il secondo input (la lunghezza massima) e rimuovi gli spazi bianchi
- Analizza la lunghezza massima come
usize - Definisci una funzione
truncate_messageche accetti due parametri:- Una porzione di stringa
&strper il messaggio - Un
usizeper la lunghezza massima
- Una porzione di stringa
- All'interno della funzione, verifica se la lunghezza del messaggio è maggiore della lunghezza massima
- In caso affermativo, restituisci una porzione del messaggio dall'indice 0 alla lunghezza massima usando
&message[0..max_len] - In caso contrario, restituisci l'intero messaggio
- Chiama la funzione con il messaggio di input e la lunghezza massima
- Stampa il risultato restituito
Input:
- Prima riga: un messaggio di testo (ad es.,
Hello World from Rust) - Seconda riga: lunghezza massima come numero (ad es.,
11)
Output:
- Il messaggio troncato se supera la lunghezza massima, altrimenti il messaggio completo
Provalo tu
use std::io;
// TODO: Definisci qui la funzione truncate_message
fn main() {
// Leggi il messaggio di testo
let mut message = String::new();
io::stdin().read_line(&mut message).expect("Failed to read line");
let message = message.trim();
// Leggi la lunghezza massima
let mut max_length_input = String::new();
io::stdin().read_line(&mut max_length_input).expect("Failed to read line");
let max_len: usize = max_length_input.trim().parse().expect("Invalid number");
// TODO: Chiama la funzione truncate_message e memorizza il risultato
// TODO: Stampa il risultato
}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 finale6Gestire l'assenza con 'Option'
Che cos'è un 'Option'?Usare 'match' con 'Option'is_some() e is_none()Estrarre il valore da un 'Option'Il metodo expectFornire un valore predefinito: unwrap_orRiepilogo - Trovare un elemento9Slice di stringhe e altro
String vs. &strCreare slice di stringheSlice come parametri di funzioneAltre sliceRiepilogo - Trovare la prima parolaEsercitati da solo: Compilatore Rust online