TapHome

Syntax a riadenie toku

Syntax skriptovacieho jazyka TapHome: príkazy a bodkočiarky, komentáre, literály, IF vo funkčnom a blokovom zápise, SWITCH, cykly WHILE a DO, BREAK, CONTINUE a RETURN.

Príkazy a bodkočiarky

Skript je postupnosť príkazov a každý príkaz končí bodkočiarkou ;. Blokové príkazy (IF … END, WHILE … LOOP, DO … LOOP WHILE …) a komentáre bodkočiarkou nekončia. Kľúčové slová a názvy nerozlišujú veľkosť písmen: IF, if a If sú to isté.

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

Bodkočiarku možno vynechať iba za posledným príkazom skriptu; vnútri bloku ju potrebuje každý príkaz, vrátane posledného pred END alebo LOOP. Vnútri bloku chýbajúca bodkočiarka pred END alebo LOOP zastaví skript chybou Unexpected character 'E' at the end of statement. Expected ';' (pred LOOP 'L').

Komentáre

Komentár začína znakom # a pokračuje do konca riadku. Môže stáť na samostatnom riadku alebo za úplným príkazom: za jeho bodkočiarkou, prípadne za END, ELSE alebo LOOP.

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

Znak # vnútri príkazu (pred jeho bodkočiarkou alebo za podmienkou IF či WHILE) skončí chybou Comment must start on a new line and inline comments are not supported.

Literály

Literál je hodnota zapísaná priamo v skripte.

LiterálPríkladPoznámky
Číslo5, 21.5, -3Desatinná bodka .. Číselný literál je typu double, takže 5 / 2 je 2.5. Bez exponentu (1e3) a bez úvodnej bodky (.5).
Hexadecimálne číslo0xA0A0, 0xffTyp int, číslice nerozlišujú veľkosť písmen: 0xA0A0 je 41120.
Binárne číslo0b10101010Typ int: 170.
Boolovská hodnotaTRUE, FALSE
Neznáme čísloNaNNikdy sa nerovná ničomu; testujte ho funkciou ISNAN.
Žiadna hodnotaNullTestujte ju funkciou ISNULL.
Text (string)"°C", "a\nb", "C:\\data"Escape sekvencie \n, \r, \t, \", \\, \xHH, \uXXXX. Neplatná escape sekvencia skončí chybou Couldn't unescape ….
Znak (char)'A', '\n'Presne jeden znak.
Kolekcia{1, 2, 3}, {"a", "b"}Aspoň jeden prvok, pozrite Kolekcie.
Hodnota enumuH, BigEndianFloat, DateTimeKind.UtcSamostatne alebo s názvom typu, pozrite Enum typy.

IF

IF vráti jednu z dvoch hodnôt podľa podmienky (funkčný zápis), alebo vykoná jeden z viacerých blokov príkazov (blokový zápis).

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

Parametre

NázovTypPopis
conditionboolNenulové číslo je TRUE, Null je FALSE.
valueIfTrueanyVráti sa, keď je podmienka TRUE.
valueIfFalseanyVoliteľný, vráti sa v ostatných prípadoch.

Návratová hodnota — zvolená hodnota, alebo Null, keď podmienka nie je TRUE a tretí argument chýba. Vyhodnotí sa iba zvolená vetva, takže tá druhá nemôže skončiť chybou.

Príklad — bezpečné delenie a náhrada za NaN. Delenie nulou zastaví skript chybou Line in script: 1 Message: Division by zero; podmienka tomu zabráni:

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

Blokový zápis

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

Podmienka môže byť v zátvorkách a musí sa zmestiť na jeden riadok; koniec riadku ju ukončí. ELSEIF sa môže opakovať, ELSE je nepovinné, END je povinné. Samotný blok vracia Null; ak má hodnota vzísť z jeho vnútra, použite 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., keď za vnútorným END nasleduje ;.

Pozrite aj — SWITCH, Operátory.

SWITCH

SWITCH porovná hodnotu so zoznamom prípadov a vráti výsledok prvého zhodného prípadu, alebo predvolený výsledok, keď sa nezhoduje žiadny prípad.

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

Poznámky — SWITCH berie najmenej 4 a najviac 100 argumentov, vždy párny počet: hodnotu, dvojice prípadu a jeho výsledku a predvolený výsledok. Prípady sa porovnávajú ako pri =: čísla podľa hodnoty, text presne; porovnanie textu s číslom skončí chybou Operator '==' not defined …. Vyhodnotí sa iba výsledok zhodného prípadu.

Príklad — návod k zariadeniu uvádza aktívny režim ako bitové hodnoty; skript ich prevedie na polohy viachodnotového prepínača:

Príklad SWITCH
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. pri nepárnom počte argumentov.

Cykly WHILE a DO

WHILE opakuje svoje príkazy, kým je podmienka TRUE; DO … LOOP WHILE ich vykoná aspoň raz. CONTINUE; preskočí zvyšok aktuálneho prechodu, BREAK; cyklus opustí; oba sa píšu bez zátvoriek.

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

DO
    statements;
LOOP WHILE condition

Rovnako ako pri IF sa podmienka končí koncom riadku. Keď začína znakom (, končí sa zodpovedajúcou ): WHILE (a > 0) AND (b > 0) berie ako podmienku iba (a > 0), preto píš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 sa zastaví chybou More than 1 000 000 loops, stopping loop. BREAK alebo CONTINUE mimo cyklu skončí chybou Cannot use BREAK() outside of WHILE or DO-WHILE. Bodkočiarka za vnútorným LOOP alebo END skončí chybou Unexpected character ';' in WHILE statement.

Názvy sa vyhodnocujú skôr ako kľúčové slová cyklov. Premenná alebo skratka zariadenia s názvom Do alebo While kľúčové slovo zakryje a cyklus skončí chybou Missing operator between 'DO' and ….

RETURN

RETURN okamžite ukončí skript a zadanú hodnotu urobí jeho výsledkom.

1
RETURN(value)

Poznámky — bez RETURN je výsledkom hodnota posledného príkazu. RETURN použite, keď má hodnota vzísť z vnútra bloku, alebo na predčasné ukončenie listener skriptu pri správach, ktoré nespracúva.

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

Pozrite aj — Výsledok skriptu.