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 Anna

Een klasse die een rol doet, wordt herkend als hebbende die rol:

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

Merk 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.

  1. Een doos met een maat
  2. Een huisdier met naam en leeftijd
  3. Een dansende robot

Cursusnavigatie

Oplossing: Een geërfd attribuut   |   Meerdere rollen samenstellen