Menu
Coddy logo textTech

Introduzione ai blocchi impl

Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 1 di 61.

In Rust, le struct definiscono quali dati contiene un tipo, ma non definiscono cosa può fare quel tipo. Per assegnare un comportamento a una struct, usiamo i blocchi di implementazione con la parola chiave impl.

Un blocco di implementazione collega le funzioni (chiamate metodi) a una struct specifica. Ecco la struttura di base:

struct Dog {
    name: String,
    age: u8,
}

impl Dog {
    fn bark(&self) {
        println!("{} says woof!", self.name);
    }
}

Il blocco impl Dog dice a Rust che tutto ciò che contiene appartiene alla struct Dog. Questa separazione mantiene pulita la definizione dei dati e ti consente di aggiungere tutti i metodi necessari nel blocco di implementazione.

Per chiamare un metodo, usa la notazione con il punto su un'istanza:

fn main() {
    let my_dog = Dog {
        name: String::from("Rex"),
        age: 3,
    };
    
    my_dog.bark(); // Output: Rex says woof!
}

Questo schema che separa i dati (la struct) dal comportamento (il blocco impl) è fondamentale per organizzare il codice Rust. Nelle prossime lezioni esploreremo come i metodi accedono ai dati delle struct tramite il parametro &self che vedi nell'esempio qui sopra.

challenge icon

Sfida

Facile

Crea una struct Cat con due campi: name (String) e lives (u8).

Aggiungi un blocco di implementazione per Cat con un metodo chiamato meow che accetta &self e stampa il nome del gatto seguito da " says meow!".

Riceverai due input:

  • Prima riga: il nome del gatto (String)
  • Seconda riga: il numero di vite (u8)

Crea un'istanza di Cat con i valori forniti e chiamane il metodo meow.

Formato dell'output previsto:

{name} says meow!

Provalo tu

use std::io;

// TODO: Definisci la struct Cat con i campi 'name' (String) e 'lives' (u8)


// TODO: Aggiungi un blocco di implementazione per Cat con un metodo 'meow'


fn main() {
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    let mut lives_input = String::new();
    io::stdin().read_line(&mut lives_input).expect("Failed to read line");
    let lives: u8 = lives_input.trim().parse().expect("Failed to parse lives");
    
    // TODO: Crea un'istanza di Cat e chiama il metodo meow
    
}
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 Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Rust online