Raku-Kurs / Objekte, Ein- und Ausgabe und Ausnahmen / Klassen und Objekte

Rollen

Eine Rolle ist ein Bündel aus Verhalten (und mitunter Daten), das sich mehrere Klassen teilen können. Wo Vererbung sagt, eine Klasse sei eine Art einer anderen, beschreibt eine Rolle etwas, das eine Klasse kann.

Sie definieren eine Rolle mit dem Schlüsselwort role, ganz ähnlich wie eine Klasse, und geben sie einer Klasse mit dem Trait does:

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

class Person does Greet {
    has $.name;
}

Die Klasse Person hat nun die Methode hello aus der Rolle, als wäre sie in der Klasse selbst geschrieben:

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

Eine Klasse, die eine Rolle erfüllt, wird auch als Trägerin dieser Rolle erkannt:

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

Beachten Sie, dass die Methode hello der Rolle self.name verwendet, obwohl die Rolle selbst kein Attribut name hat. Das ist in Ordnung: Die Methode läuft als Teil derjenigen Klasse, die die Rolle einbindet, und diese Klasse liefert name. Das nächste Thema zeigt, dass eine Klasse mehr als eine Rolle zugleich übernehmen kann.

Themen in diesem Abschnitt

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Abschnitts.

Übungen

Dieser Abschnitt enthält 3 Übungen. Sehen Sie sich alle Themen dieses Abschnitts an, bevor Sie mit den Übungen beginnen.

  1. Eine Box mit Größe
  2. Ein Haustier mit Namen und Alter
  3. Ein tanzender Roboter

Kursnavigation

Lösung: Ein geerbtes Attribut   |   Mehrere Rollen komponieren