Sfairadora

  • Referenční příručka

Složené hodnoty

V jazyce Enki se nakládá stejně s jednoduchými (skalárními) hodnotami jak se složenými. Je tedy možné zapisovat konstanty složených typů – struktur, polí a sekvencí. Obecně se konstanta složeného typu zapisuje jako seznam hodnot uzavřených složenými závorkami, oddělených čárkami. Například:
{5, 8, 15, 29}
Typ takto získané složené konstanty je vždy sekvence s typem prvku určeným skutečně použitými hodnotami. Pokud je použito více typů hodnot, je typem prvku sekvence sjednocení všech použitých typů. Pro takovýto typ sekvence existují implicitní datové konverze na ostatní složené datové typy. Takže lze například psát:
var Int[2] pair;
pair = {5, 10}
Přirazení na druhém řádku automaticky zkonvertuje vytvořenou složenou hodnotu na dvouprvkové pole a tuto hodnotu potom přiřadí do proměnné pair.
V případě nutnosti lze konverzi vynutit.

Struktury

Typ sekvence lze konvertovat i na strukturu – konverze potom probíhá podle pořadí složek v definici struktury.
Mějme například strukturu Adresa s těmito složkami:
Struct(String jméno
String ulice
String město)
Potom lze provést například toto přiřazení:
var Adresa odesílatel;
odesílatel = {"Jan Novák", "Dlouhá 53", "Praha 1"}
Vzhledem k tomu, že nemusí být jasné, jaké je pořadí složek v definici, případně se může změnit, lze určit výslovně jména složek tak, že před složku napíšeme její jméno a dvojtečku:
odesílatel = {jméno: "Jan Novák", ulice: "Dlouhá 53", město: "Praha 1"}
Typ takto zkonstruované hodnoty je stále sekvence, uvedená jména jsou přiřazena jako názvy prvků, které lze použít místo indexů. Tyto názvy uložené u sekvence potom budou použity při konverzi sekvence na strukturu. Pokud některá položka ve výčtu nemá jméno, přiřazují se po řadě od poslední pojmenované. Nezadaným složkám se přiřadí jejich výchozí hodnoty zadané v definici typu. Takže zápis:
odesílatel = {ulice: "Dlouhá 53", "Praha 1"}
je ekvivalentní zápisu:
odesílatel = {jméno: "", ulice: "Dlouhá 53", město: "Praha 1"}

Nekonstantní složené hodnoty

Stejným způsobem lze konstruovat i složené hodnoty, jejichž složky jsou zadány proměnnou nebo výrazem. Například zápis:
var Int[2] pair;
pair = {x, 2*y}
je ekvivalentní zápisu:
var Int[2] pair;
pair[0] = x;
pair[1] = 2*y