Sfairadora

  • Referenční příručka

Definice konstant

V jazyce Enki lze definovat symbolickou konstantu pomocí konstrukce def:
def příznaky název = hodnota
Název konstanty musí být identifikátor. Doporučuje se pojmenovávat konstanty identifikátory se všemi písmeny velkými, aby se odlišily od proměnných.
Hodnota musí být zadána konstantním výrazem (tj. nesmí obsahovat odkazy na proměnné nebo vnější data). Konstantní výrazy jsou například: 5, 2+3, sin(20) a pod. Typ konstanty se určí podle typu hodnoty. V případě potřeby lze typ hodnoty vynutit operátorem přetypování.
Příznaky mohou být prázdné. Možné případy jsou popsány níže v oddíle Konstanty typu l-hodnota.
Protože všechny konstrukce jazyka Enki vracejí hodnotu, je hodnotou definice konstanty pojmenovávaná hodnota.

Konstanty složených hodnot

Hodnotou konstanty může být i instance složeného typu.
Příklad:
def ČTVERCE = [Seq(Int)]{0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100};
Potom lze psát například
ČTVERCE[5]
hodnota tohoto výrazu je rovna 25. Jde o konstantní výraz.

Definice pojmenovaných typů

Vzhledem k tomu, že datový typ je v Enki běžný případ hodnoty, lze pomocí definice konstanty nadefinovat i pojmenovaný datový typ.
Příklad:
def Adresa = Struct(String jméno, String ulice, String město);
var Adresa odesílatel;
odesílatel.jméno = "Jan Novák";
odesílatel.ulice = "Klikatá 12";
odesílatel.město = "Praha";
Jména pojmenovaných typů doporučujeme na rozdíl od ostatních konstant zapisovat s prvním velkým písmenem.

Konstanty typu l-hodnota

Konstrukcí def lze pojmenovat rovněž l-hodnotu (viz kapitolu Odkazy na data). Konstantou typu l-hodnota se vlastně zavádí zkratka pro delší referenci na datovou položku. Konstanta typu l-hodnota je vytvořena zadáním příznaku & nebo const &. V druhém případě jde o definici konstantní l-hodnoty – to znamená, že skrze definovanou zkratku lze získat hodnotu datové položky, ale nelze ji měnit (to nevylučuje, že hodnotu datové položky lze měnit jiným způsobem).
Příklad:
def &prvek = document.data.tabulka.0.jméno;
potom zápis prvek = "Adam" je ekvivalentní zápisu document.data.tabulka.0.jméno = "Adam".

Rozsah platnosti konstant

Definovaná konstanta je platná od místa definice do konce bloku. Bloky jsou popsány v kapitole o proměnných. Pokud je třeba definovat konstantu s platností přes více funkcí, lze tak učinit v nadřazeném poskytovateli dat, pokud jsou funkce umístěny v dispelu, nebo pro celý dokumentu sekci Definice.