Cursus Raku / Geavanceerd / Subroutines

Anonieme subroutines

Een subroutine hoeft geen naam te hebben. Een anonieme subroutine wordt geschreven net als een gewone, maar zonder naam, en wordt meestal opgeslagen in een variabele zodat je hem later kunt aanroepen.

my $double = sub ($x) {
    $x * 2
};

say $double(5); # 10

De variabele $double bevat de subroutine, en $double(5) roept hem aan met het argument 5.

Pointy blocks

Raku biedt een kortere notatie voor hetzelfde — het pointy block. Het gebruikt de pijl -> om de parameters te introduceren, en heeft noch het woord sub noch haakjes eromheen nodig:

my $double = -> $x {
    $x * 2
};

say $double(5); # 10

Dit is de meest gebruikelijke manier om een kleine anonieme subroutine te schrijven.

De &-sigil

Als je de subroutine liever bij naam aanroept dan via een $-variabele, declareer de variabele dan met de &-sigil. Dan kun je hem zonder sigil aanroepen, precies zoals een gewone subroutine:

my &triple = -> $x {
    $x * 3
};

say triple(4); # 12

Doorgeven aan een andere functie

Je hoeft een anonieme subroutine helemaal niet in een variabele op te slaan. Omdat het gewoon een waarde is, kun je het direct doorgeven aan een functie die er een verwacht — zoals map, grep of sort:

say (1, 2, 3).map(-> $x { $x * 2 }); # (2 4 6)

Het pointy block is hier de anonieme subroutine, en map roept het een keer aan voor elk element. Dit is in feite wat je al die tijd al deed: elk { ... }-blok en -> $x { ... } dat je aan map en grep hebt doorgegeven, is een kleine anonieme subroutine, ter plekke geschreven in plaats van eerst een naam te geven.

Praktijk

Maak de 1 quiz over de inhoud van dit onderwerp.

Oefeningen

Deze sectie bevat 3 oefeningen. Bekijk alle onderwerpen van deze sectie voordat je aan de oefeningen begint.

  1. Verdrievoudigen
  2. Een anoniem kwadraat
  3. Som met de &-sigil

Cursusnavigatie

Quiz — Geneste scope   |   Verdrievoudigen