Cursus Raku / Objecten, in- en uitvoer en excepties / Klassen en objecten
Subroutines en methoden
Je hebt nu twee manieren om een stuk gedrag te verpakken: een subroutine en een methode. Ze lijken op elkaar maar worden verschillend gebruikt.
Een subroutine staat op zichzelf. Je roept hem bij naam aan en geeft hem alles wat hij nodig heeft als argumenten mee:
sub area-of($radius) {
π * $radius * $radius;
}
say area-of(2); # 12.566370614359172Een methode hoort bij een klasse en wordt met de punt op een object
aangeroepen. Ze kan via self en de accessors van de
attributen de eigen gegevens van het object gebruiken, dus die gegevens
geef je niet mee:
class Circle {
has $.radius;
method area {
π * $.radius * $.radius;
}
}
say Circle.new(radius => 2).area; # 12.566370614359172Beide berekenen hetzelfde getal. Het verschil zit in waar de gegevens vandaan komen: de subroutine krijgt de straal als argument, terwijl de methode hem afleest van het object waarop ze is aangeroepen.
Als vuistregel: gebruik een subroutine voor een op zichzelf staande bewerking die eenvoudigweg haar argumenten omzet, en een methode wanneer het gedrag van nature bij een object hoort en met de eigen toestand van dat object werkt. Voor klassespecifieke maar generieke routines gebruik je klassemethoden.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Oefeningen
Deze sectie bevat 2 oefeningen. Bekijk alle onderwerpen van deze sectie voordat je aan de oefeningen begint.