Menu
CoddyTech

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 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 un letterale stringa

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

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 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_message che accetta due parametri:
    • Una slice 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 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
}
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