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 AnnaUna classe che assume un ruolo viene riconosciuta come portatrice di quel ruolo:
say Person.new(name => 'Anna') ~~ Greet; # TrueNota 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.