Kurso de Raku / Progresinta / Subprogramoj

Subskriboj

En la parto Esencoj vi difinis subrutinojn kun poziciaj kaj nomitaj parametroj kaj donis al ili defaŭltajn valorojn. La listo de parametroj nomiĝas la subskribo. Ĉi tiu sekcio aldonas du pliajn aferojn, kiujn subskribo povas fari: marki parametron kiel nedevigan, kaj kolekti ajnan nombron da kromaj argumentoj.

Nedevigaj parametroj

Parametro sekvata de demandosigno estas nedeviga: la vokanto rajtas ellasi ĝin. Kiam ĝi estas ellasita, la parametro estas nedifinita, do vi povas provizi retiriĝon per la operatoro //:

sub greet($name, $greeting?) {
    my $g = $greeting // 'Hello';
    say "$g, $name!";
}

greet('Anna');           # Hello, Anna!
greet('Anna', 'Hi');     # Hi, Anna!

Kiam greet estas vokata kun unu argumento, $greeting estas nedifinita, do // retiriĝas al 'Hello'.

Englutaj parametroj

Parametro markita per * estas engluta: ĝi kolektas ĉiujn restantajn argumentojn. Engluta tabelo, skribata *@, kolektas ajnan nombron da poziciaj argumentoj en tabelon:

sub count-them(*@items) {
    say @items.elems;
}

count-them(1, 2, 3, 4); # 4
count-them('a', 'b');   # 2

Vi povas kombini ordinarajn parametrojn kun engluta. La fiksitaj parametroj estas plenigitaj unue, kaj kio restas iras en la englutan tabelon:

sub titles($name, *@titles) {
    say "$name has {@titles.elems} title(s)";
}

titles('Anna', 'Dr', 'Prof'); # Anna has 2 title(s)

Same, engluta hako, skribata *%, kolektas ajnajn kromajn nomitajn argumentojn en hakon:

sub register($name, *%options) {
    say "$name: {%options.elems} option(s)";
    say "role is %options<role>";
}

register('Anna', role => 'admin', active => True);

La du nomitaj argumentoj finiĝas kiel ŝlosiloj de %options, do la programo presas:

Anna: 2 option(s)
role is admin

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. Sumi ĉiujn argumentojn
  2. Nedeviga eksponento
  3. Englutaj nomitaj argumentoj

Kursa navigado

Subprogramoj   |   Sumi ĉiujn argumentojn