Cursus Raku / Programmatio functionalis, simultanea, reactiva et retialis / Programmatio functionalis / Iteratores
Iteratorem scribere
Iterator simpliciter obiectum est quod partem inbuiltam
Iterator facit et methodum pull-one praebet.
Illa methodus valorem sequentem reddit, vel IterationEnd
cum nihil superest. Ecce iterator numerationis inversae qui numerum
reddit et ad nihil gradum facit:
class Countdown does Iterator {
has Int $.n is rw;
method pull-one {
return IterationEnd if $!n <= 0;
return $!n--;
}
}Unaquaeque vocatio pull-one primum inspicit utrum
numeratio defecerit; si non, numerum currentem reddit eumque minuit.
Postminutio $!n-- valorem ante subtractionem
reddit, itaque numeri 3, 2, 1 exeunt. Illum manu agens, ut
quilibet alius iterator apparet:
my $c = Countdown.new(n => 3);
say $c.pull-one; # 3
say $c.pull-one; # 2
say $c.pull-one; # 1
say $c.pull-one =:= IterationEnd; # TrueIterator per se non est quod anulus for directe accipere
potest — anulus rem iterabilem exspectat. Involve iteratorem in
Seq et percurribilis fit:
for Seq.new(Countdown.new(n => 3)) -> $x {
say $x;
}Illud 3, 2, 1 imprimit. In
codice cotidiano gather / take loco eius
peteres — forma generatoris pro
eodem effectu multo brevior est. Partem Iterator directe
scribere tamen semel videre operae pretium est, quia nudum ostendit id
super quod gather, map et omnis anulus
for aedificantur: obiectum quod uni quaestioni respondet —
«quis est valor sequens?»
Navigatio cursus
← Quiz — Protocollum iteratorum | Summa per pull-one →
💪 Vel recta ad exercitationem
huius sectionis i.