Kurso de Raku / Progresinta / Subprogramoj

Anonimaj subrutinaj

Subrutino ne devas havi nomon. Anonima subrutino estas skribata same kiel ordinara, sed sen nomo, kaj kutime estas konservita en variablo por ke vi povu voki ĝin poste.

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

say $double(5); # 10

La variablo $double enhavas la subrutinon, kaj $double(5) vokas ĝin kun la argumento 5.

Pintaj blokoj

Raku ofertas pli mallongan notacion por la sama afero — la pinta bloko. Ĝi uzas la sagon -> por enkonduki la parametrojn, kaj bezonas nek la vorton sub nek krampojn ĉirkaŭ ili:

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

say $double(5); # 10

Tio estas la plej ofta maniero skribi malgrandan anoniman subrutinon.

La sigelo &

Se vi preferas voki la subrutinon per nomo anstataŭ per $-variablo, deklaru la variablon kun la sigelo &. Tiam vi povas voki ĝin sen la sigelo, tute same kiel ordinaran subrutinon:

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

say triple(4); # 12

Transdoni al alia funkcio

Vi tute ne devas konservi anoniman subrutinon en variablo. Ĉar ĝi estas simple valoro, vi povas transdoni ĝin rekte al funkcio kiu atendas tian — ekzemple map, grep, aŭ sort:

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

La pinta bloko estas la anonima subrutino ĉi tie, kaj map vokas ĝin unufoje por ĉiu elemento. Fakte, tio estas kion vi faris la tutan tempon: ĉiu { ... } bloko kaj -> $x { ... } kiujn vi transdonis al map kaj grep estas malgranda anonima subrutino, skribita ĝuste tie kie ĝi estas bezonata anstataŭ esti unue nomita.

Praktiko

Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.

Ekzercoj

En ĉi tiu sekcio estas 3 ekzercoj. Trarigardu ĉiujn temojn de ĉi tiu sekcio antaŭ ol komenci la ekzercojn.

  1. Triobligi ĝin
  2. Anonima kvadrato
  3. Sumo kun la sigelo &

Kursa navigado

Kvizo — Nestita amplekso   |   Triobligi ĝin