Corso di Raku / Oggetti, input/output ed eccezioni / Classi e oggetti

Ruoli

Un ruolo è un fascio di comportamenti (e a volte di dati) che può essere condiviso da più classi. Mentre l’ereditarietà dice che una classe è un tipo di un’altra, un ruolo descrive qualcosa che una classe sa fare.

Un ruolo si definisce con la parola chiave role, quasi come una classe, e lo si dà a una classe con il tratto does:

role Greet {
    method hello {
        'Hello from ' ~ self.name;
    }
}

class Person does Greet {
    has $.name;
}

Ora la classe Person ha il metodo hello del ruolo, come se fosse scritto nella classe stessa:

say Person.new(name => 'Anna').hello; # Hello from Anna

Una classe che assume un ruolo viene riconosciuta come portatrice di quel ruolo:

say Person.new(name => 'Anna') ~~ Greet; # True

Nota che il metodo hello del ruolo usa self.name, anche se il ruolo stesso non ha alcun attributo name. Va benissimo: il metodo gira come parte della classe che compone il ruolo, e quella classe fornisce name. L’argomento successivo mostra che una classe può assumere più di un ruolo per volta.

Argomenti di questa sezione

Pratica

Risolvi 1 quiz sul contenuto di questa sezione.

Esercizi

Questa sezione contiene 3 esercizi. Guarda tutti gli argomenti di questa sezione prima di iniziare gli esercizi.

  1. Una scatola con una misura
  2. Un animale con nome ed età
  3. Un robot che balla

← Soluzione: Un attributo ereditato   |   Comporre più ruoli →