CH05-L02 · praktické použitie

Makro exists_one()

Overíte, že podmienku spĺňa práve jedna položka zoznamu.

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

Viete odlíšiť presne jednu zhodu od jednej alebo viacerých zhôd.

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

exists_one() spočíta položky, pre ktoré je podmienka pravdivá, a uspeje iba pri počte presne jedna. Je prísnejšie než exists(): nula zhôd aj dve zhody vrátia nepravdu. Podmienka v príklade číta logickú položku active z každej mapy.

Prečítajte pripravený príklad

Pravidlo v režime CEL + JSON je:

approvers.exists_one(person, person.active)

Jeho vstup je:

{
  "approvers": [
    { "name": "A", "active": false },
    { "name": "B", "active": true }
  ]
}

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. Osoba A má active: false.
  2. Osoba B má active: true.
  3. Pravdivý je presne jeden výsledok, preto exists_one() vráti true.

Vaša úloha

  1. Spustite príklad.
  2. Nastavte obe osoby ako neaktívne.
  3. Potom nastavte obe ako aktívne a porovnajte dva nepravdivé výsledky.

Očakávané pozorovanie: Nula aktívnych osôb aj dve aktívne osoby porušia požiadavku presne jednej zhody.

Častá chyba

Nepoužívajte exists_one(), keď pravidlo znamená „aspoň jedna“. Toto makro vyjadruje počet, nie iba prítomnosť.

Zobraziť vysvetlenie

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

Kontrolná otázka

Ako sa líši exists_one() od exists(), keď vyhovujú dve položky?

Hlavná myšlienka

Makro exists_one() použite iba vtedy, keď je jedinečnosť súčasťou pravidla.

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.