CH04-L01 · praktické použitie

Dĺžka reťazca a Unicode

Zmeriate text s diakritikou a emoji podľa znakov Unicode.

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

Viete vysvetliť, čo size() počíta pri reťazci a prečo nejde o počet bajtov.

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

Pri reťazci počíta size() kódové body Unicode, nie bajty UTF-8. Text Žilina 👋 obsahuje šesť písmen, jednu medzeru a jedno emoji, preto príklad vráti 8. Táto definícia je stabilná, hoci znak vnímaný používateľom môže niekedy obsahovať viac kódových bodov.

Prečítajte pripravený príklad

Pravidlo v režime CEL + JSON je:

text.size()

Jeho vstup je:

{
  "text": "Žilina 👋"
}

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. CEL prečíta hodnotu ako jeden reťazec Unicode.
  2. size() spočíta jeho kódové body.
  3. Výsledkom je celé číslo 8.

Vaša úloha

  1. Spustite oba režimy a potvrďte výsledok 8.
  2. Odstráňte emoji a výraz spustite znova.
  3. Skúste '👨‍👩‍👧‍👦'.size() a všimnite si, že jeden vizuálny symbol môže mať viac kódových bodov.

Očakávané pozorovanie: Po odstránení emoji je výsledok 7; rodinné emoji ukazuje rozdiel medzi kódovým bodom a vizuálnym znakom.

Častá chyba

Funkciu size() pre reťazec nepoužívajte ako limit bajtov pri ukladaní alebo prenose. Počet bajtov je iná veličina.

Zobraziť vysvetlenie

Definícia reťazca CEL určuje, že size() počíta kódové body Unicode.

Kontrolná otázka

Prečo výsledkom nie je počet bajtov UTF-8?

Hlavná myšlienka

Vždy určte, čo počítate: veľkosť reťazca je počet kódových bodov, nie bajtov.

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.