Curso de Raku / Objetos, entrada/salida y excepciones / Clases y objetos
Roles
Un rol es un paquete de comportamiento (y a veces de datos) que varias clases pueden compartir. Mientras que la herencia dice que una clase es una clase de otra, un rol describe algo que una clase sabe hacer.
Un rol se define con la palabra clave role, casi como
una clase, y se le da a una clase con el rasgo does:
role Greet {
method hello {
'Hello from ' ~ self.name;
}
}
class Person does Greet {
has $.name;
}La clase Person tiene ahora el método hello
del rol, como si estuviera escrito en la propia clase:
say Person.new(name => 'Anna').hello; # Hello from AnnaUna clase que asume un rol se reconoce como portadora de ese rol:
say Person.new(name => 'Anna') ~~ Greet; # TrueFíjate en que el método hello del rol usa
self.name, aunque el rol mismo no tiene ningún atributo
name. No pasa nada: el método se ejecuta como parte de la
clase que compone el rol, y esa clase aporta name. El tema
siguiente muestra que una clase puede asumir más de un rol a la vez.
Temas de esta sección
Práctica
Resuelve 1 cuestionario sobre el contenido de esta sección.
Ejercicios
Esta sección contiene 3 ejercicios. Mira todos los temas de esta sección antes de empezar los ejercicios.