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

Métodos de clase

La mayoría de los métodos se llaman sobre un objeto, es decir, sobre una instancia de una clase. Pero un método también puede llamarse sobre la clase misma, esto es, sobre el objeto de tipo. A un método así se le suele llamar método de clase. Es útil para valores y operaciones que pertenecen a la clase en conjunto, y no a un objeto concreto.

Un método de clase se define exactamente igual que cualquier otro método:

class Road {
    method speed-limit { 120 }
}

y se llama sobre el nombre de la clase en lugar de sobre una instancia:

say Road.speed-limit; # 120

Ya has estado usando un método de clase sin nombrarlo: new es un método que se llama sobre la clase para crear un objeto nuevo.

Un método de clase no tiene acceso a los atributos de instancia — no hay ningún objeto concreto detrás —, así que solo trabaja con información que es igual para todos los objetos de la clase. Cuando el trabajo depende de los datos de un objeto concreto, usa un método ordinario llamado sobre una instancia; cuando no, un método de clase encaja de forma natural.

Fíjate en que, aunque los métodos de clase no necesitan una instancia, sí pueden usar los datos del objeto cuando sí tienes uno:

class Road {
    has $.name;
    method speed-limit { 120 }

    method info {
        "The maximum speed on $.name is " ~ self.speed-limit
    }
}

my $R404 = Road.new(name => 'Road 404');
say $R404.info;

Este programa imprime el resultado esperado:

The maximum speed on Road 404 is 120

Sin el objeto instanciado de la clase, una llamada como say Road.info daría un error.

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. Una fórmula en la clase
  2. De kilómetros a millas

Solución: Conversión de temperatura   |   Una fórmula en la clase