---
title: "Syntax a riadenie toku"
description: "Syntax skriptov TapHome: bodkočiarky, komentáre, číselné a textové literály, bloky IF a ELSEIF, SWITCH, cykly WHILE a DO, BREAK, CONTINUE, RETURN a bezpečné delenie pomocou IF."
url: "https://taphome.com/sk/docs/script/basics/"
language: sk
lastmod: 2026-11-06
generator: hugo
ai:
  topics: ["scripting-language","syntax","control-flow","variables","expressions"]
  questions: ["Ako písať viacriadkové skripty v TapHome?","Ako použiť podmienky IF/ELSE vo výrazoch TapHome?","Ako funguje príkaz SWITCH v TapHome?","Ako napíšem cyklus WHILE alebo DO v TapHome?","Ako zapisujem hexadecimálne alebo binárne čísla v TapHome?","Ako opravím chybu \"Line in script: 1 Message: Division by zero\" v TapHome skripte?","Ako bezpečne vydelím dve premenné (va1/va2) tak, aby sa vzorec použil iba vtedy, keď je menovateľ väčší ako 0?","Ako zapíšem hodnotu 0, keď je zariadenie v chybe alebo vráti NaN namiesto čísla?","Kam môžem v TapHome skripte napísať komentár?"]
---

# 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: 2026-11-06

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é.

```taphome
# 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: 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`.

```taphome
# počiatočná hodnota
VAR x := 5;          # komentár za bodkočiarkou
IF x > 3
    x := 1;
END                  # koniec podmienky
```

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á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`](https://taphome.com/sk/docs/script/logic-and-diagnostics/#isnan). |
| Žiadna hodnota | `Null` | Testujte ju funkciou [`ISNULL`](https://taphome.com/sk/docs/script/logic-and-diagnostics/#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](https://taphome.com/sk/docs/script/data-types/#collections). |
| Hodnota enumu | `H`, `BigEndianFloat`, `DateTimeKind.Utc` | Samostatne alebo s názvom typu, pozrite [Enum typy](https://taphome.com/sk/docs/script/data-types/#enum-types). |

## 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).

```text
IF(condition, valueIfTrue)
IF(condition, valueIfTrue, valueIfFalse)
```

**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:

```taphome
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**

```text
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`.

```taphome
# vyber hodnotu podľa teploty Te
IF Te < 5
    RETURN(1);   # pod 5
ELSEIF Te > 10
    RETURN(3);   # nad 10
ELSE
    RETURN(0);   # inak
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](https://taphome.com/sk/docs/script/basics/#switch), [Operátory](https://taphome.com/sk/docs/script/operators/).

## 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.

```text
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](https://taphome.com/documentation/script/switch-example.png)

```taphome
# 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.

```text
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)`.

```taphome
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: 5
```

```taphome
int 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: 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`.

> [!WARNING]
> 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.

```text
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.

```taphome
# 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 unknown
```

**Pozrite aj** — [Výsledok skriptu](https://taphome.com/sk/docs/script/#script-result).
