Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Funkcionālā programmēšana / Datu plūsmas

Atpakaļvērstā plūsma

Visas līdzšinējās plūsmas tecēja uz priekšu ar ==> — no avota kreisajā pusē uz mērķi labajā. Raku ir arī spoguļoperators <==, atpakaļvērstā plūsma. Tā darbojas pretējā virzienā: mērķis atrodas kreisajā pusē, un dati tiek vilkti iekšā no avota labajā pusē.

Šeit ir iepriekšējais pāra skaitļu konveijers, uzrakstīts atpakaļvērsti:

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

Lasiet to no labās uz kreiso: paņem 1..10, paturi pāra skaitļus un savāc tos @evens. Rezultāts ir tieši tāds pats kā (1..10) ==> grep(* %% 2) ==> my @evens — mainījies ir tikai virziens, kādā posmus rakstāt.

Atpakaļvērstās plūsmas ķēdējas tāpat, un arī šeit priekšgalā ir mērķis:

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

Darbs joprojām notiek, sākot ar avotu — sāc ar 1..10, paturi pāra skaitļus, kāpini tos kvadrātā —, bet uz lappuses posmi ir uzskaitīti no galamērķa atpakaļ uz izcelsmi. Elementu secība netiek aizskarta; <== maina tikai lasīšanas virzienu, nekad ne datus.

Tā kā kodu parasti lasa no kreisās uz labo, priekšupvērstā ==> mēdz lasīties dabiskāk: jūs vispirms satiekat datus un sekojat tiem līdz vietai, kur tie nonāk. Atpakaļvērstā <== ir tiem gadījumiem, kad stāstu labāk pastāsta galamērķis priekšgalā — nosaucot to, ko būvējat, pirms tā, no kā tas ir uzbūvēts. Abas ir precīzi spoguļattēli, tāpēc izvēlieties to virzienu, kas lasās labāk.

Prakse

Jūs gaida 1 viktorīna par šī temata saturu.

Kursa navigācija

Viktorīna — Plūsmas   |   Viktorīna — Atpakaļvērstā plūsma


💪 Vai arī dodieties tieši uz šīs sadaļas vingrinājumiem.