Kurso de Raku / Funkcia, samtempa, reaktiva kaj reta programado / Funkcia programado / Datumfluoj

La retrodirekta fluo

Ĉiu ĝisnuna fluo fluis antaŭen per ==>, de fonto maldekstre en celon dekstre. Raku havas ankaŭ la spegulan operatoron, <==, la retrodirektan fluon. Ĝi kuras inverse: la celo sidas maldekstre, kaj la datumoj estas tirataj el la fonto dekstre.

Jen la ĉenstacio de paraj nombroj el antaŭe, skribita retrodirekte:

my @evens <== grep(* %% 2) <== (1..10);
say @evens; # [2 4 6 8 10]

Legu ĝin de dekstre maldekstren: prenu 1..10, konservu la parajn nombrojn kaj kolektu ilin en @evens. La rezulto estas precize la sama kiel ĉe (1..10) ==> grep(* %% 2) ==> my @evens — ŝanĝiĝis nur la direkto, en kiu vi skribas la etapojn.

Retrodirektaj fluoj ĉeniĝas same, kaj denove la celo iras unue:

my @result <== map(* ** 2) <== grep(* %% 2) <== (1..10);
say @result; # [4 16 36 64 100]

La laboro ankoraŭ okazas fonto-unue — komencu per 1..10, konservu la parajn, kvadratigu ilin — sed sur la paĝo la etapoj estas listigitaj de la celloko reen al la origino. La ordo de la elementoj restas netuŝita; <== ŝanĝas nur la legdirekton, neniam la datumojn.

Ĉar kodo kutime legiĝas de maldekstre dekstren, la antaŭendirekta ==> emas legiĝi pli nature: vi renkontas la datumojn unue kaj sekvas ilin ĝis tie, kien ili alvenas. La retrodirekta <== ekzistas por la okazoj, kiam komenci per la celloko rakontas la historion pli bone — nomi tion, kion vi konstruas, antaŭ tio, el kio ĝi estas konstruita. La du estas precizaj speguloj, do elektu tiun direkton, kiu legiĝas plej bone.

Praktiko

Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.

Kursa navigado

Kvizo — Fluoj   |   Kvizo — La retrodirekta fluo


💪 Aŭ iru rekte al la ekzercoj de ĉi tiu sekcio.