Sfairadora

  • Referenční příručka

Sekvence, tabulka

Sekvencí rozumíme složený typ, jehož instance je tvořena proměnlivým počtem prvků shodného typu. Jednotlivé prvky jsou identifikovány celočíselnými indexy. První prvek má index 0, další 1 a tak dále až k n‑1 (kde n je počet prvků sekvence). Prvkům sekvence může být přiřazeno jméno, potom lze prvek identifikovat záměně jménem i indexem. Každému prvku lze přiřadit nejvýše jedno jméno.
Na rozdíl od pole lze do sekvence průběžně vkládat nové prvky, čímž se zvětšuje její velikost. Pokud se vloží prvek doprostřed sekvence, prvky následující budou nadále přítomny na indexech o jedničku vyšších, identita pojmenovaných prvků zůstane zachována. Analogicky lze ze sekvence prvky vypouštět.
Sekvence, jejímž prvkem je struktura, se nazývá tabulka. Takto definovaná tabulka odpovídá pojmu tabulky v běžných databázových systémech. Složky struktury, která určuje typ prvků sekvence, představují atributy či sloupce tabulky.
Pro sekvenci je možné zadat omezující podmínku pro hodnotu prvků (filtr), způsob uspořádání prvků a stanovit, že hodnoty některých sloupců tabulek (nebo hodnoty celých prvků) musejí být jedinečné. Dále je možné zadat vkládací funkci a vyjímací funkci, které umožňují provést nějakou specifickou akci při vložení resp. vynětí prvku ze sekvence.

Filtr

Filtr určuje podmínku, která musí být splněna, aby prvek mohl být vložen do sekvence.
Filtr je zadán seznamem disjunktivních podmínek – stačí tedy, aby jedna z těchto podmínek byla splněna a záznam je pro sekvenci přípustný.
Každá disjunktivní podmínka je buď funkce v jazyce Enki nebo seznam konjunktivních podmínek.
Pokud jde o funkci, vrací hodnotu typu Bool – pokud je výsledek TRUE, záznam je přijat, pokud FALSE, záznam je odmítnut. Funkce nemá parametry, může se však odkazovat na objekt this, který identifikuje posuzovaný záznam. Jméno tohoto objektu není nutné v jazyce Enki uvádět, takže místo this.a<100 je možné psát pouze a<100.
Pokud jde o seznam konjunktivních podmínek je třeba, aby všechny podmínky byly splněny k tomu, aby byl záznam přijat. Každá podmínka obsahuje referenci na sloupec, k němuž se váže. Dále je určena buď jednoduchým relačním operátorem (je rovno, je větší než, řetězec obsahuje podřetězec...) a hodnotou vůči níž se hodnota sloupce porovnává, nebo funkcí, která může obsahovat i složitější podmínku pro hodnotu sloupce.
Pokud jde o funkci, vrací hodnotu typu Bool – pokud je výsledek TRUE, záznam je přijat, pokud FALSE, záznam je odmítnut. Funkce má jeden parametr x, který obsahuje hodnotu daného sloupce pro posuzovaná záznam. Tak je možné zapsat podmínku nezávisle na názvu sloupce.
Pokud jde o jednoduchý relační operátor, je možné určit hodnotu, vůči níž se hodnota sloupce porovnává, buď konstantou nebo referencí na jiná data. V druhém případě reference na prvním místě obsahuje jméno objektu a dále vlastní referenci v rámci tohoto objektu. Pokud je například třeba porovnat hodnotu s hodnotou sloupce a, použije se reference this.a.
Pokud je některá z podmínek určena funkcí nebo referencí na data, je možné zadat doplňkové informace analytického typu.

Uspořádání

Uspořádání je zadáno seznamem referencí sloupců (relativně k prvku sekvenci) spolu s informací, zda se má uspořádávat vzestupně nebo sestupně. Uspořádávat lze pouze podle sloupců, jejichž typ je uspořádaný (tedy podle čísel a řetězcových typů; složené typy jsou uspořádány lexikograficky na základě uspořádání svých složek). Pokud je zadána více než jeden sloupec, sekvence se primárně uspořádává podle prvního sloupce. Pokud má v tomto sloupci několik prvků stejnou hodnotu, použije se pro rozhodnutí uspořádání druhý sloupec v pořadí a tak dále.
Pokud je sekvence uspořádaná a vkládají se prvky, neurčuje se index, kam se má prvek vložit – sám se zatřídí na příslušné místo.

Jednoznačnost

Je možné určit, že hodnoty některých sloupců nesmějí být v sekvenci duplicitní. Jedinečnost je zadána seznamem referencí na sloupce, jejichž hodnoty musejí být v sekvenci jedinečné. Pokud je zadán jeden sloupec, pak každý prvek sekvence musí mít jinou hodnotu tohoto sloupce. Pokud je zadáno n sloupců, musí být jedinečné hodnota celé n-tice, nikoli tedy hodnoty jednotlivých sloupců brané odděleně.
Pokud se požaduje jedinečnost celého prvku sekvence, zadá se jako reference sloupce prázdná reference (zapsaná jako tečka).

Vkládací funkce

Funkce v jazyce Enki volána po vložení prvku. Funkce může provést případné další inicializace nebo synchronizaci ostatních dat s novým stavem sekvence. Funkce nemá žádné parametry, ale má dostupné standardní objekty, z nichž je významný především objekt this, který představuje vložená data.
Funkce nevrací žádnou hodnotu (návratový typ je None).
V jazyce Enki platí konvence, že se identifikátor this nemusí výslovně uvádět, takže např. funkce
this.id = document.data.id_gen++
je totožná s
id = document.data.id_gen++

Vyjímací funkce

Funkce v jazyce Enki volaná před vyjmutím prvku ze sekvence. Funkce může synchronizovat další data nebo ostatní prvky s novým stavem sekvence. Funkce nemá žádné parametry, ale má dostupné standardní objekty, z nichž je významný především objekt this, který představuje vyjímaná data. Dále má k dispozici objekt seq, který představuje sekvenci, z níž se vyjímá.
Pokud má sekvence zadán filtr, uspořádání, jedinečnost, vkládací funkci nebo vyjímací funkci, nejde o volný typ. Odpovídajícím volným typem je sekvence se stejným typem prvku avšak bez filtru, uspořádání, jedinečnosti, vkládací funkce a vyjímací funkce.

Zápis

Seq(TYPE)
nebo
TYPE[*]
kde TYPE je typ prvku.

Viz též