Cursus Raku / Objecten, in- en uitvoer en excepties / Klassen en objecten
Rollen
Een rol is een bundel gedrag (en soms gegevens) die door meerdere klassen gedeeld kan worden. Waar overerving zegt dat een klasse een soort van iets anders is, beschrijft een rol iets wat een klasse kan doen.
Je definieert een rol met het sleutelwoord role, vrijwel
als een klasse, en je geeft hem aan een klasse met de trait
does:
role Greet {
method hello {
'Hello from ' ~ self.name;
}
}
class Person does Greet {
has $.name;
}De klasse Person heeft nu de methode hello
uit de rol, alsof die in de klasse zelf geschreven was:
say Person.new(name => 'Anna').hello; # Hello from AnnaEen klasse die een rol doet, wordt herkend als hebbende die rol:
say Person.new(name => 'Anna') ~~ Greet; # TrueMerk op dat de methode hello van de rol
self.name gebruikt, ook al heeft de rol zelf geen attribuut
name. Dat is prima: de methode draait als onderdeel van
welke klasse de rol ook samenstelt, en die klasse levert
name. Het volgende onderwerp laat zien dat een klasse meer
dan één rol tegelijk kan aannemen.
Onderwerpen in deze sectie
Praktijk
Maak de 1 quiz over de inhoud van deze sectie.
Oefeningen
Deze sectie bevat 3 oefeningen. Bekijk alle onderwerpen van deze sectie voordat je aan de oefeningen begint.
Cursusnavigatie
← Oplossing: Een geërfd attribuut | Meerdere rollen samenstellen →