Cursus Raku / Provectus / Subprogrammata

Stella Whatever

Fortasse vidisti * in expressionibus adhibitum qualis est * * 2 vel * %% 2 cum map et grep vocantur. Illud * est stella Whatever, et expressio circa eam parvam functionem unius argumenti statim aedificat. Haec sectio explicat quid revera sit, quomodo ad clausulam se habeat, et ubi stella nuda simpliciter «quidquid vis» significet.

Stella functionem facit

Cum * in expressione apparet, Raku totam expressionem in functionem vertit — in WhateverCode — in qua stella argumentum repraesentat:

my $double = * * 2;

say $double.^name; # WhateverCode
say $double(21);   # 42

* * 2 est functio quae unum argumentum suum per duo multiplicat. Hac de causa (1..5).map(* * 2) operatur: map exacte talem functionem unius argumenti accipit.

Whatever et clausula comparatae

Expressio Whatever est brevior modus scribendi functionem quam etiam ut clausulam scribere posses. Haec tria aequipollent:

* * 2
{ $_ * 2 }
-> $x { $x * 2 }

Forma Whatever nullum parametrum nominat; forma clausulae variabili thematis $_ utitur; forma cuspidata $x nominat. Illa ultima, -> $x { ... }, per se parva functio est — eam proprie in Subprogrammatis anonymis invenies; hic satis est eam ut tertium modum eiusdem functionis unius argumenti legere. Ad simplicem expressionem stella est brevissima, quapropter tam frequens est cum map, grep et sort:

say (1..5).map(* * 2);            # (2 4 6 8 10)
say (1..5).map({ $_ * 2 });       # (2 4 6 8 10)
say (1..5).map(-> $x { $x * 2 }); # (2 4 6 8 10)

Clausulam adhibe cum logica plus quam una expressione eget, vel cum parametrum nominatum clarius adiuvat. Stellam adhibe cum brevis expressio omnia dicit.

Plures stellae

Unaquaeque * in expressione argumentum separatum est, ordine. Itaque duae stellae functionem duorum argumentorum faciunt:

my $add = * + *;

say $add(3, 4); # 7

Hic * + * est functio duorum argumentorum quae argumenta sua addit — exempli gratia summam currentem et elementum sequens.

Stella nuda

Per se * «quidquid» significat — quantum est, vel nullum limitem. Duo usus cotidiani:

my @a = 10, 20, 30;
say @a[*-1];        # 30  — * est longitudo ordinis, ergo *-1 est index ultimus

say (1..*).head(3); # (1 2 3)  — 1..* est intervallum sine fine

In @a[*-1] stella numerum elementorum repraesentat, et in 1..* «nullum terminum superiorem» significat. Sive functionem aedificat sive «quidquid vis» significat, stella est unum ex utilissimis Raku compendiis.

Exercitatio

Sequuntur 1 quiz de contentis huius argumenti.

Exercitationes

In hac sectione sunt 3 exercitationes. Omnia huius sectionis argumenta inspice antequam exercitationes incipias.

  1. Whatever cum map
  2. Whatever duobus argumentis
  3. Intervallum apertum

Quiz — Parametra absorptiva   |   Whatever cum map