CH05-L03 · praktické použitie

Makro filter()

Vytvoríte nový zoznam iba z položiek, ktoré spĺňajú podmienku.

Všeobecný CELSpustiteľné tuZdokumentované
Čo sa naučím?

Viete, že filter() vracia zoznam a nemení pôvodnú kolekciu.

Kde si to vyskúšam?

Priamo nižšie v skúšobnom prostredí prehliadača.

Čo mám urobiť?

Spustite oba režimy, porovnajte pôvod ich hodnôt a potom dokončite úlohu.

Vyskúšajte CEL · pilot v prehliadači

Vyskúšajte oba spôsoby zadania hodnôt

Lokálne hodnoty môžete definovať v jednom výraze CEL alebo môžete premenné zadať ako vstup JSON. Všetko sa vykonáva vo vašom prehliadači.

Pilotná podmnožina CEL
Jeden samostatný výraz CELFunkcia cel.bind() priradí hodnote lokálny názov a vráti výsledok posledného výrazu.

cel.bind()cel.bind() je voliteľné oficiálne rozšírenie. Nie je súčasťou jadra jazyka CEL a hostiteľská aplikácia ho nemusí podporovať.

Tip: výraz spustíte aj klávesmi Ctrl/⌘ + Enter.
Výsledok

Aktívny príklad vyhodnotíte tlačidlom Spustiť CEL.

Rozsah pilotu: literály, explicitné konverzie, lokálne premenné vytvorené pomocou cel.bind(), premenné z JSON, zoznamy, mapy, prítomnosť, kolekčné makrá, základné kontroly reťazcov, časové hodnoty, aritmetika, porovnávanie, logika a podmienený operátor.

Čo budete robiť

Pripravený výraz spustíte v cvičisku vyššie, budete meniť vždy jeden vstup a vysvetlíte výsledok. Začnite v režime Iba CEL a potom rovnaké pravidlo zopakujte v režime CEL + JSON.

Ako to funguje

filter() vyhodnotí logickú podmienku pre každú položku a vráti nový zoznam pôvodných položiek, ktoré vyhoveli. Čísla JSON vstupujú do tohto cvičiska ako double, ale zvyšok po delení % prijíma celé čísla. Výraz JSON preto každú hodnotu explicitne prevedie pomocou int(number). Samostatný zoznam celých čísel konverziu nepotrebuje.

Prečítajte pripravený príklad

Pravidlo v režime CEL + JSON je:

numbers.filter(number, int(number) % 2 == 0)

Jeho vstup je:

{
  "numbers": [1, 2, 3, 4, 5, 6]
}

Záložka Iba CEL obsahuje hodnoty aj pravidlo v jednom výraze. Povolené rozšírenie cel.bind() udrží každý názov lokálny v jeho poslednom argumente.

Vyhodnotenie krok za krokom

  1. Pri každom čísle sa kontroluje zvyšok 0 po delení dvoma.
  2. Podmienku spĺňajú iba 2, 4 a 6.
  3. Výsledkom je nový zoznam s tromi položkami.

Vaša úloha

  1. Spustite oba režimy a porovnajte zobrazené číselné typy.
  2. Zmeňte deliteľa z 2 na 3.
  3. Pridajte do vstupu 9 a pred spustením predpovedzte nový výsledok.

Očakávané pozorovanie: Pri deliteľovi 3 vyhovujú hodnoty 3, 6 a pridaná 9.

Častá chyba

filter() hodnoty netransformuje. Konverzia je iba súčasťou podmienky; vyhovujúce hodnoty JSON zostanú vo výsledku typu double.

Zobraziť vysvetlenie

Cvičisko mapuje čísla JSON na double, ale operátor % je definovaný pre celočíselné typy.

Kontrolná otázka

Prečo verzia s JSON používa int(number)?

Hlavná myšlienka

Makro filter() vyberá pôvodné položky. Konverziu potrebnú v podmienke zapíšte explicitne.

Zdroje

  • CEL-DEV — oficiálny prehľad CEL.
  • CEL-LANG — oficiálna definícia jazyka CEL.
  • CEL-GO-BIND — oficiálna dokumentácia voliteľného rozšírenia cel.bind() použitého v samostatnej záložke.