Menu
Coddy logo textTech

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 operazione

Tuttavia, 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 letterale

Questa 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à.

challenge icon

Sfida

Facile

Riceverai 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_message che accetti due parametri:
    • Una porzione di stringa &str per il messaggio
    • Un usize per la lunghezza massima
  • 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
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Rust online