Řízení běhu programů
Příkaz IF… THEN… ELSE
Pomocí tohoto příkazu dokážete jednoduše řídit běh makra na základě vstupních podmínek, nebo na základě podmínek změněných v průběhu programu. Příkaz rozdělí činnosti v závislosti na vyhodnocení podmínek na dvě nebo více větví, které dále pokračují nezávisle na sobě – program samozřejmě pokračuje pouze po jedné z nich.
Zjednodušeně „Venku prší, vezmu si deštník?“ – pokud ANO, tak jdu a vezmu si deštník, pokud NE, tak si ho nevezmu. Program zhodnotí, zda venku prší a je li to pravda, tak si vezme deštník.
Přeloženo do češtiny je příkaz IF … Then … Else – Když…tak…nebo. Pozor, nepleťte si tuto funkci s funkcí IF, kterou poskytuje Calc. Její výsledek je podobný (u IF … Then … Else lze zadat více vstupů funkce), ale zápis se zásadně liší. Funkce Calcu v Basicu nefungují!
A co na to nápověda:
Příkaz If…Then spustí blok příkazů v závislosti na dané podmínce. Když StarBasic narazí na příkaz If, ověří podmínku. Jeli podmínka True, spustí se všechny následující příkazy až do příštího příkazu Else nebo ElseIf. Je li podmínka False a následuje příkaz ElseIf, StarBasic ověří podmínku a spustí následující příkazy, je li podmínka True. Je li False, program přeskočí příkazy až k dalšímu příkazu ElseIf nebo Else. Příkazy následující za příkazem Else se spustí pouze tehdy, nebyla li žádná z předchozích podmínek splněna. Po vyhodnocení všech podmínek a spuštění odpovídajících příkazů pokračuje program příkazy následujícími po EndIf.
Možné je vložit do sebe více příkazů If…Then.
Podmínka porovnání
Nejčastěji se jako podmínka používá porovnání – tedy například promenna1 < promenna2; pokud je toto pravda, pokračuje makro příkazem následujícím za then.
V praxi:
If promenna1 < promenna2 then msgbox "Proměnná 1 je menší než Proměnná 2" endif
Samozřejmě potřebujete ošetřit i případ, kdy je to opačně – tedy použijete else (nebo):
if promenna1 < promenna2 then msgbox "Proměnná 1 je menší než Proměnná 2" else msgbox "Proměnná 2 je menší než Proměnná 1" end if
Ani toto ale nemusí stačit, a proto použijete ElseIF (nebo když)
if promenna1 < promenna2 then msgbox "Proměnná 1 je menší než Proměnná 2" elseif promenna1 > promenna2 then msgbox "Proměnná 2 je menší než Proměnná 1" else ' cokoliv jiného (již se nezadává podmínka) msgbox "Proměnné jsou si rovny" end if
Pokud chcete pro výsledek jedné podmínky použít další dělení dle podmínky, tak vnoříte další funkci (takových vnoření můžete použít, kolik chcete, ale pro přehlednost je lepší použít další možnosti, například Select case).
TIP: Nezapomeňte každé takovéto vnoření samostatně ukončit pomocí EndIF, jinak program hlásí chybu. U rozsáhlejších maker se taková chyba špatně dohledává, protože program se zastaví na zcela jiném místě (to proto, že plní příkazy, které jsou v podmínce). Každé IF musí mít svůj Endif!!
V praxi:
function porovnani (cislo as long, cislo2 as long) as long if cislo < 0 then if cislo2 < 0 then porovnani = 0 else porovnani = 0 endif elseif cislo > 0 then if cislo2 < 0 then porovnani = 0 else if cislo > cislo2 then porovnani = cislo – cislo2 elseif cislo < cislo2 then porovnani = cislo2 – cislo else porovnani = cislo endif endif endif end function
Funkce vždy odečte menší číslo od většího. Pokud jsou si čísla rovna, je jedno z čísel výsledkem.
Podmínka BOOLEAN – logická hodnota
Pokud potřebujete použít podmínku již při zadání, nebo při volání makra jiným makrem, definujete proměnnou jako logickou hodnotu přímo (dim podminka as boolean); tato proměnná pak vrací pouze True nebo False. Při použití v Calcu pak zadáváte do této podmínky přímo "true" ("false") nebo jejich číselné vyjádření 1 (true) a 0 (false) .
Zadání pak programujete takto:
dim promenna as boolean promenna = true if promenna then msgbox "Pravda" else msgbox "Nepravda" end if
Vidíte, že nprovádíme porovnání, protože sama proměnná je buď True, nebo False, nepotřebujeme tedy znát výsledek testu.
Tady je také ale nutné ošetřit případ, kdy podmínka není zadaná, nebo ji umožníte nezadat. Například pro zjednodušení zápisu funkce umožníte nezadat podmínku s tím, že pokud podmínka chybí, bude program pokračovat, jako když je podmínka True (nebo False). Na ošetření takového chování použijete funkci IsMissing a možnost zadání (nebo nezadání) podmínky zajistíte příkazem Optional před určením podmínky.
IsMissing (když chybí) vrací True nebo False.
Optional při zadání tohoto příkazu dáváte programu na vědomí, že tato proměnná může, ale nemusí být zadána, a program, pokud tato proměnná chybí, nehlásí chybu, ale pokračuje tak, jak chcete vy.
Tento jednoduchý příklad pro Calc sečte dvě hodnoty, pokud je zadaná podmínka True, nebo pokud není zadaná. Pokud je zadaná podmínka False, vrátí první hodnotu.
Function soucet (cislo1 as long, cislo2 as long, optional podminka as boolean) as long if IsMissing (podminka) then soucet = cislo1 + cislo2 elseif podminka = true then soucet = cislo1 + cislo2 else soucet = cislo1 end if end function
možnosti použití funkce:
Možnosti použití funkce v sešitu
Je možné kdykoliv IF … Then … Else ukončit (Exit sub), nikdy ale není možné do IF vstoupit. Vyskočení provedete jednoduše jako příkaz po vyhodnocení podmínky. Například pokud jste dosáhli požadovaného výsledku a podmínka je True, tak ukončíte makro – Exit sub .