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 possedute, il che limita i modi in cui puoi chiamarla:
fn print_message(text: String) {
println!("{}", text);
}
// Funziona, ma acquisisce la proprietà del valore
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 un letterale stringaQuesta flessibilità fa sì che le tue funzioni funzionino in più situazioni senza costringere chi le chiama a convertire i propri dati o a rinunciarne alla 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 accetta come parametri una slice di stringa (&str) e una lunghezza massima (usize). Se la lunghezza del messaggio supera la lunghezza massima, la funzione deve restituire una slice 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
- Converti la lunghezza massima in
usize - Definisci una funzione
truncate_messageche accetta due parametri:- Una slice di stringa
&strper il messaggio - Un
usizeper la lunghezza massima
- Una slice di stringa
- All’interno della funzione, verifica se la lunghezza del messaggio è maggiore della lunghezza massima
- In caso affermativo, restituisci una slice del messaggio dall’indice 0 fino 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'I cicli come espressioniRiepilogo - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi di una structStruct mutabiliLe struct come parametri di funzioneStruct tuplaRiepilogo - Crea una struct Book2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreScorrere un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker di punteggi di base5Coppie chiave-valore con le mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriIterare su una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: semplice inventario di articoli
Impostazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere insieme il tutto3Lista di cose da fare da riga di comando
Impostazione 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 stringa e altro
String vs. &strCreare slice di stringaSlice come parametri di funzioneAltre sliceRiepilogo - Trovare la prima parolaEsercitati da solo: Compilatore Rust online