Kurso de Raku / Progresinta / Regofluo

gather kaj take

La paro gather kaj take estas fleksebla maniero konstrui liston. Vi envolvas iom da kodo en blokon gather, kaj ĉiufoje kiam tiu kodo vokas take, la valoro estas aldonata al la listo, kiun gather produktas.

my @result = gather {
    take 1;
    take 2;
    take 3;
};

say @result; # [1 2 3]

La tri vokoj de take kontribuas tri valorojn, kaj gather kolektas ilin en la liston konservitan en @result.

La vera forto de ĉi tiu paro montriĝas, kiam la vokoj de take estas disaj tra ordinara regofluo, ekzemple buklo kun kondiĉo. La listo tiam enhavas nur la valorojn, kiujn vi elektis preni:

my @evens = gather for 1..10 {
    take $_ if $_ %% 2;
};

say @evens; # [2 4 6 8 10]

Ĉi tie la buklo iras tra la nombroj de 1 ĝis 10, sed nur la paraj estas prenataj, do @evens fine enhavas 2, 4, 6, 8, 10. (La operatoro %% kontrolas, ĉu nombro dividiĝas senreste.)

Ĉi tiu apartigo estas tio, kio faras gather/take tiel oportuna: la ĉirkaŭa kodo decidas, kiam produkti valoron, kaj gather kviete kolektas ĉion, kio estas prenata.

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. Ripeti ĉiun nombron
  2. Kvadratoj
  3. Kolekti ĝis plena

Kursa navigado

Solvo: Kongrui laŭ tipo   |   Ripeti ĉiun nombron