Čo budete robiť
Jeden zoznam prevediete cez tri jasné fázy: výpočet pomocných údajov, výber vhodných položiek a zostavenie konečného výsledku. Príklad spustite najprv v režime Iba CEL a potom v režime CEL + JSON.
Ako to funguje
Každé volanie v reťazci pracuje s výsledkom predchádzajúceho volania. Prvé map() vytvorí mapu s kódom a vypočítaným súčtom. filter() ponechá iba objednávky od 100. Posledné map() vráti už iba ich kódy.
orders
.map(order, {'code': order.code, 'total': order.price * order.quantity})
.filter(row, row.total >= 100.0)
.map(row, row.code)Vyhodnotenie krok za krokom
- Objednávka
A-10dostane medzivýsledok{'code': 'A-10', 'total': 100.0}. - Objednávka
B-20má súčet54.0, preto ju filter odstráni. C-30má súčet120.0a zostane vo výsledku.- Posledná transformácia vráti
['A-10', 'C-30'].
Pomocná mapa je obyčajná hodnota CEL. Nemodifikuje vstupnú objednávku a existuje iba vo výsledku daného kroku.
Vaša úloha
- Spustite pripravený výraz.
- Zmeňte hranicu zo
100.0na110.0. - Namiesto
row.codevráťte poslednýmmap()celú pomocnú mapurow.
Očakávané pozorovanie: Po zvýšení hranice zostane iba C-30. Po odstránení poslednej projekcie uvidíte aj vypočítané súčty.
Častá chyba
Premenná makra platí iba v jeho vlastnom tele. Názov order nie je dostupný v nasledujúcom filter(); tam pracujete s novou položkou pomenovanou row.
Zobraziť vysvetlenie
Výstup prvého map() je nový zoznam máp. Ďalšie makro už nečíta pôvodné objednávky, ale práve tieto mapy.
Kontrolná otázka
Aký typ zoznamu vstupuje do filter() a aký typ zoznamu vracia posledné map()?
Hlavná myšlienka
Dlhší výraz čítajte zľava doprava ako dátový tok. Každá fáza má mať jednu zrozumiteľnú úlohu.
Zdroje
CEL-DEV— oficiálny prehľad CEL a kolekčných makier.CEL-LANG— oficiálna definícia zoznamov, máp a makier.CEL-GO-BIND— oficiálna dokumentácia voliteľného rozšíreniacel.bind()použitého v samostatnej záložke.