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: 4Bodkoč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 checkZnak # 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ál | Príklad | Poznámky |
|---|---|---|
| Číslo | 5, 21.5, -3 | Desatinná bodka .. Číselný literál je typu double, takže 5 / 2 je 2.5. Bez exponentu (1e3) a bez úvodnej bodky (.5). |
| Hexadecimálne číslo | 0xA0A0, 0xff | Typ int, číslice nerozlišujú veľkosť písmen: 0xA0A0 je 41120. |
| Binárne číslo | 0b10101010 | Typ int: 170. |
| Boolovská hodnota | TRUE, FALSE | |
| Neznáme číslo | NaN | Nikdy sa nerovná ničomu; testujte ho funkciou ISNAN. |
| Žiadna hodnota | Null | Testujte 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 enumu | H, BigEndianFloat, DateTimeKind.Utc | Samostatne 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).
| |
Parametre
| Názov | Typ | Popis |
|---|---|---|
condition | bool | Nenulové číslo je TRUE, Null je FALSE. |
valueIfTrue | any | Vráti sa, keď je podmienka TRUE. |
valueIfFalse | any | Voliteľ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 NaNBlokový zápis
| |
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);
ENDChyby — 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.
| |
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:

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.
| |
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: 5int n := 1;
DO
n := n * 2;
LOOP WHILE n < 100
n;
# Result: 128Chyby — 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
DoaleboWhilekľúčové slovo zakryje a cyklus skončí chybouMissing operator between 'DO' and ….
RETURN
RETURN okamžite ukončí skript a zadanú hodnotu urobí jeho výsledkom.
| |
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 unknownPozrite aj — Výsledok skriptu.