Corso di Raku / Oggetti, input/output ed eccezioni / Classi e oggetti

Subroutine e metodi

Ora hai due modi per impacchettare un comportamento: una subroutine e un metodo. Si somigliano ma si usano in modo diverso.

Una subroutine sta da sola. La chiami per nome e le passi come argomenti tutto ciò che le serve:

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

say area-of(2); # 12.566370614359172

Un metodo appartiene a una classe e viene chiamato su un oggetto con il punto. Può usare i dati dell’oggetto stesso attraverso self e gli accessori degli attributi, quindi quei dati non glieli passi:

class Circle {
    has $.radius;

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

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

Entrambi calcolano lo stesso numero. La differenza è da dove arrivano i dati: la subroutine riceve il raggio come argomento, mentre il metodo lo legge dall’oggetto su cui è stato chiamato.

Come regola pratica, usa una subroutine per un’operazione a sé stante che si limita a trasformare i suoi argomenti, e un metodo quando il comportamento appartiene naturalmente a un oggetto e lavora con lo stato di quell’oggetto. Per routine specifiche della classe ma generiche, usa i metodi di classe.

Pratica

Risolvi 1 quiz sul contenuto di questo argomento.

Esercizi

Questa sezione contiene 2 esercizi. Guarda tutti gli argomenti di questa sezione prima di iniziare gli esercizi.

  1. Triplicare come subroutine
  2. Triplicare come metodo

Quiz — Metodi di classe   |   Triplicare come subroutine