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'); # 2Vi 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 adminPraktiko
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.