TapHome

Syntaxe a řízení toku

Syntaxe skriptovacího jazyka TapHome: příkazy a středníky, komentáře, literály, IF ve formě funkce a bloku, SWITCH, cykly WHILE a DO, BREAK, CONTINUE a RETURN.

Příkazy a středníky

Skript je posloupnost příkazů a každý příkaz končí středníkem ;. Blokové příkazy (IF … END, WHILE … LOOP, DO … LOOP WHILE …) a komentáře středníkem nekončí. Klíčová slova a názvy nerozlišují velká a malá písmena: IF, if a If jsou totéž.

VAR x := 5;
IF x > 3
    x := x - 1;
END
x;
# Result: 4

Středník smí chybět jen za posledním příkazem skriptu; uvnitř bloku ho potřebuje každý příkaz, i ten poslední před END nebo LOOP. Když uvnitř bloku chybí středník před END nebo LOOP, skript se zastaví s hlášením Unexpected character 'E' at the end of statement. Expected ';' ('L' před LOOP).

Komentáře

Komentář začíná znakem # a pokračuje do konce řádku. Může stát na samostatném řádku nebo následovat za úplným příkazem: za jeho středníkem nebo za END, ELSE či LOOP.

# starting value
VAR x := 5;          # a comment after the semicolon
IF x > 3
    x := 1;
END                  # end of the check

Znak # uvnitř příkazu (před jeho středníkem nebo za podmínkou IF či WHILE) skončí chybou Comment must start on a new line and inline comments are not supported.

Literály

Literál je hodnota zapsaná přímo ve skriptu.

LiterálPříkladPoznámky
Číslo5, 21.5, -3Desetinná tečka .. Číselný literál je double, takže 5 / 2 je 2.5. Bez exponentu (1e3), bez úvodní tečky (.5).
Šestnáctkové číslo0xA0A0, 0xffTyp int, u číslic nezáleží na velikosti písmen: 0xA0A0 je 41120.
Binární číslo0b10101010Typ int: 170.
Logická hodnotaTRUE, FALSE
Neznámé čísloNaNNikdy se ničemu nerovná; testujte ho funkcí ISNAN.
Žádná hodnotaNullTestujte ji funkcí ISNULL.
Řetězec"°C", "a\nb", "C:\\data"Escape sekvence \n, \r, \t, \", \\, \xHH, \uXXXX. Neplatná sekvence skončí chybou Couldn't unescape ….
Znak'A', '\n'Právě jeden znak.
Kolekce{1, 2, 3}, {"a", "b"}Alespoň jeden prvek, viz Kolekce.
Hodnota výčtuH, BigEndianFloat, DateTimeKind.UtcSamotná nebo s názvem typu, viz Výčtové typy.

IF

IF vrátí jednu ze dvou hodnot podle podmínky (forma funkce), nebo vykoná jeden z několika bloků příkazů (forma bloku).

1
2
IF(condition, valueIfTrue)
IF(condition, valueIfTrue, valueIfFalse)

Parametry

NázevTypPopis
conditionboolNenulové číslo je TRUE, Null je FALSE.
valueIfTrueanyVrátí se, když je podmínka TRUE.
valueIfFalseanyNepovinný, vrátí se v ostatních případech.

Vrací vybranou hodnotu, nebo Null, když podmínka není TRUE a třetí argument chybí. Vyhodnotí se jen vybraná větev, takže ta druhá nemůže selhat.

Příklad — bezpečné dělení a náhrada za NaN. Dělení nulou zastaví skript s hlášením Line in script: 1 Message: Division by zero; podmínka mu zabrání:

IF(va2 > 0, va1/va2, 0);
# Result: va1/va2, or 0 when va2 is 0
IF(ISNAN(Te), 0, Te);
# Result: 0 when the device is in error or returns NaN

Forma bloku

1
2
3
4
5
6
7
IF condition
    statements;
ELSEIF condition
    statements;
ELSE
    statements;
END

Podmínka může být v závorkách a musí se vejít na jeden řádek; konec řádku ji ukončí. ELSEIF se může opakovat, ELSE je nepovinné, END je povinné. Samotný blok vrací Null; chcete-li z něj vrátit hodnotu, použijte RETURN.

IF Te < 5
    RETURN(1);
ELSEIF Te > 10
    RETURN(3);
ELSE
    RETURN(0);
END

Chyby — Function IF requires at least 2 parameters.; Unexpected keyword 'X' at the end of IF statement., když za vnořeným END následuje ;.

Viz také — SWITCH, Operátory.

SWITCH

SWITCH porovná hodnotu se seznamem případů a vrátí výsledek prvního shodného případu, nebo výchozí výsledek, když se žádný případ neshoduje.

1
SWITCH(value, case1, result1, case2, result2, ..., defaultResult)

Poznámky — SWITCH přijímá nejméně 4 a nejvýše 100 argumentů, vždy sudý počet: hodnotu, dvojice případu a jeho výsledku a výchozí výsledek. Případy se porovnávají jako =: čísla podle hodnoty, text přesně; porovnání textu s číslem skončí chybou Operator '==' not defined …. Vyhodnotí se jen výsledek shodného případu.

Příklad — návod k zařízení uvádí aktivní režim jako hodnoty bitů; skript je převede na polohy vícehodnotového spínače:

SWITCH Example
SWITCH(MODBUSR(H, 168, UInt16),
    0, 0,
    0x0002, 1,
    0x0004, 2,
    0x0008, 3,
    0x0010, 4,
    0x0040, 5,
    0x0800, 6,
    NaN);

Chyby — Function SWITCH requires at least 4 parameters.; Invalid arguments for SWITCH function. při lichém počtu argumentů.

Cykly WHILE a DO

WHILE opakuje své příkazy, dokud je podmínka TRUE; DO … LOOP WHILE je vykoná alespoň jednou. CONTINUE; přeskočí zbytek průchodu, BREAK; cyklus opustí; oba se píší bez závorek.

1
2
3
4
5
6
7
WHILE condition
    statements;
LOOP

DO
    statements;
LOOP WHILE condition

Stejně jako u IF podmínka končí koncem řádku. Když začíná znakem (, končí u odpovídající ): WHILE (a > 0) AND (b > 0) vezme jako podmínku jen (a > 0), proto pište WHILE (a > 0 AND b > 0).

int i := 10;
WHILE i > 0
    i := i - 1;
    IF i > 5
        CONTINUE;
    END
    BREAK;
LOOP
i;
# Result: 5
int n := 1;
DO
    n := n * 2;
LOOP WHILE n < 100
n;
# Result: 128

Chyby — cyklus se zastaví s hlášením More than 1 000 000 loops, stopping loop. BREAK nebo CONTINUE mimo cyklus skončí chybou Cannot use BREAK() outside of WHILE or DO-WHILE. Středník ; za vnořeným LOOP nebo END skončí chybou Unexpected character ';' in WHILE statement.

Názvy se vyhodnocují dříve než klíčová slova cyklu. Proměnná nebo zkratka zařízení s názvem Do nebo While klíčové slovo zakryje a cyklus skončí chybou Missing operator between 'DO' and ….

RETURN

RETURN okamžitě ukončí skript a zadanou hodnotu učiní jeho výsledkem.

1
RETURN(value)

Poznámky — bez RETURN je výsledkem hodnota posledního příkazu. RETURN použijte, když chcete vrátit hodnotu zevnitř bloku, nebo když má listener skript předčasně skončit u zpráv, které nezpracovává.

IF ISNAN(Te)
    RETURN(0);
END
Te * 1.8 + 32;
# Result: the temperature in °F, or 0 when it is unknown

Viz také — Výsledek skriptu.