Curso de Raku / Objetos, entrada/salida y excepciones / Clases y objetos

Subrutinas y métodos

Ya tienes dos maneras de empaquetar un comportamiento: una subrutina y un método. Se parecen, pero se usan de forma distinta.

Una subrutina se sostiene sola. La llamas por su nombre y le pasas como argumentos todo lo que necesita:

sub area-of($radius) {
    π * $radius * $radius;
}

say area-of(2); # 12.566370614359172

Un método pertenece a una clase y se llama sobre un objeto con el punto. Puede usar los datos del propio objeto a través de self y de los accesores de los atributos, así que esos datos no se los pasas:

class Circle {
    has $.radius;

    method area {
        π * $.radius * $.radius;
    }
}

say Circle.new(radius => 2).area; # 12.566370614359172

Ambos calculan el mismo número. La diferencia está en de dónde vienen los datos: la subrutina recibe el radio como argumento, mientras que el método lo lee del objeto sobre el que se llamó.

Como regla práctica, usa una subrutina para una operación aislada que se limite a transformar sus argumentos, y un método cuando el comportamiento pertenezca naturalmente a un objeto y trabaje con el estado de ese objeto. Para rutinas propias de la clase pero genéricas, usa métodos de clase.

Práctica

Resuelve 1 cuestionario sobre el contenido de este tema.

Ejercicios

Esta sección contiene 2 ejercicios. Mira todos los temas de esta sección antes de empezar los ejercicios.

  1. Triplicar como subrutina
  2. Triplicar como método

Quiz — Métodos de clase   |   Triplicar como subrutina