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.
Posledná aktualizácia:
Skript TapHome je postupnosť príkazov, každý zakončený bodkočiarkou, ktorá sa môže vetviť pomocou IF a SWITCH a opakovať cyklami WHILE a DO. Stránka popisuje komentáre, literály (čísla, hexadecimálne a binárne hodnoty, text, kolekcie), funkčný a blokový zápis IF, SWITCH, cykly s BREAK a CONTINUE a RETURN. Kľúčové slová a názvy nerozlišujú veľkosť písmen a skript vráti hodnotu posledného príkazu, pokiaľ ho skôr neukončí RETURN. Napríklad IF(va2 > 0, va1/va2, 0) delí bezpečne a zabráni chybe Division by zero.
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é.
# x začína na 5
VAR x := 5;
IF x > 3
x := x - 1; # vykoná sa, len keď x je väčšie ako 3
END
# posledný výraz je výsledok
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.
# počiatočná hodnota
VAR x := 5; # komentár za bodkočiarkou
IF x > 3
x := 1;
END # koniec podmienkyZnak # 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.
# vyber hodnotu podľa teploty Te
IF Te < 5
RETURN(1); # pod 5
ELSEIF Te > 10
RETURN(3); # nad 10
ELSE
RETURN(0); # inak
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:

# prečíta bity režimu z registra Modbus 168
# hodnota bitu sa zmení na polohu prepínača, inak NaN
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; # počítadlo začína na 10
WHILE i > 0
i := i - 1; # odpočítavanie
IF i > 5
CONTINUE; # zvyšok prechodu sa preskočí, kým je i nad 5
END
BREAK; # cyklus skončí, keď je i najviac 5
LOOP
i;
# Result: 5int n := 1; # počiatočná hodnota
# telo beží aspoň raz, potom kým n < 100
DO
n := n * 2; # n sa v každom prechode zdvojnásobí
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.
# skript skončí s 0, keď Te nie je známa
IF ISNAN(Te)
RETURN(0);
END
# prepočet teploty na °F
Te * 1.8 + 32;
# Result: the temperature in °F, or 0 when it is unknownPozrite aj — Výsledok skriptu.