CH05-L01 · praktické použitie

Makrá all() a exists()

Overíte podmienku pre všetky položky a vyhľadáte aspoň jednu zhodu.

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

Viete rozlíšiť požiadavku na všetky položky od požiadavky na aspoň jednu položku.

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

Kolekčné makrá vytvoria dočasnú premennú pre každú položku. all(score, ...) vráti pravdu iba vtedy, keď každé skóre spĺňa podmienku. exists(score, ...) vráti pravdu, ak podmienku spĺňa aspoň jedno skóre. Pri prázdnom zozname je all() pravda a exists() nepravda.

Prečítajte pripravený príklad

Pravidlo v režime CEL + JSON je:

scores.all(score, score >= 50.0) && scores.exists(score, score >= 90.0)

Jeho vstup je:

{
  "scores": [72, 94, 81]
}

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. Každé skóre je aspoň 50.0.
  2. Hodnota 94.0 je aspoň 90.0.
  3. Výsledky oboch makier sú pravdivé, preto celý výraz vráti true.

Vaša úloha

  1. Spustite príklad.
  2. Zmeňte 72 na 42 a určte, ktoré makro zlyhá.
  3. Hodnotu vráťte, zmeňte 94 na 84 a určte druhé zlyhanie.

Očakávané pozorovanie: Skóre pod 50 spôsobí nepravdu v all(); odstránenie jediného skóre aspoň 90 spôsobí nepravdu v exists().

Častá chyba

Premenná score existuje iba vo vnútri podmienky makra. Po volaní makra nie je dostupná.

Zobraziť vysvetlenie

all() vráti true; exists() vráti false.

Kontrolná otázka

Čo vrátia [].all(x, x > 0) a [].exists(x, x > 0)?

Hlavná myšlienka

Na všeobecnú požiadavku použite all(), na aspoň jednu zhodu exists() a prázdnu kolekciu posúďte vedome.

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.