Podmínky


native! if

Provede blok při splnění zadané podmínky.

if <test> [ block ]

>> if 10 > 4 [print "large"]
large

native! unless

Totéž jako if not. Provede blok pouze při nesplnění zadané podmínky.

unless <test> [ block (if test false) ]

>> unless 10 > 4 [print "large"]
== none

>> unless 4 > 10 [print "large"]
large

native! either

Nový název pro klasickou podmínku if-else. Provede první blok, je-li podmínka vyhodnocena jako  true ; v opačném případě provede druhý blok.

either <test> [true block] [false block]

>> either 10 > 4 [print "bigger"] [print "smaller"]
bigger

>> either 4 > 10 [print "bigger"] [print "smaller"]
smaller

native! switch

Provede blok, odpovídající zadané hodnotě.

Red[]


switch 20 [

       10 [print "ten"]

       20 [print "twenty"]

       30 [print "thirty"]

]


twenty
>>


/default

Nenalezne-li program shodu se zadáním, provede 'defaultní' blok.

Red[]


switch/default 15 [

       10 [print "ten"]

       20 [print "twenty"]

       30 [print "thirty"]

][ print "none of them"]        ;default block


none of them >>

native! case

Vyhodnotí řadu podmínek a provede blok, odpovídající prvnímu testu s hodnocením true.

Red[]


case [

       10 > 20 [print "not ok!"]

       20 > 10 [print "this is it!"]

       30 > 10 [print "also ok!"]

]


this is it!
>>

/all

Provede všechny testy s hodnotou true.

Red[]


case/all [

       10 > 20 [print "not ok!"]

       20 > 10 [print "this is it!"]

       30 > 10 [print "also ok!"]

]


this is it!
also ok!

native! catch & throw

Catch a throw lze použít pro vytvoření složitější řídící struktury. Ve sve nejjednodušší formě obdrží catch  návratovou hodnotu z  více možností 'throw' :

Red[]


a: 10

print catch [

       if a < 10 [throw "too small"]

       if a = 10 [throw "just right"]

       if a > 10 [throw "too big"]

]


just right

catch/name

odchytí pojmenované 'throw'

throw/name

throws to a named catch



Boolean branching

native! all

Vyhodnotí všechny výrazy v bloku a vrací poslední výslednou hodnotu, lze-li všechny výrazy označit jako true. Případně vrací  none, je-li některý výraz hodnocen jako false.

>> john: "boy"
== "boy"

>> alice: "girl"
== "girl"

>> all [john = "boy" alice = "girl" 10 + 3]        ;all true, the last evaluation is returned.
== 13

>> all [john = "boy" alice = "boy" 10 + 3]        ; alice = "boy" is false!
== none

native! any

Hodnotí postupně výrazy v bloku a vrací první hodnotu, která není  false. Jsou-li všechny vyhodnocené hodnoty false , vrací  none.

>> john: "boy"
== "boy"

>> alice: "girl"
== "girl"

>> any [john = "girl"  alice = "girl"  10 + 3]        ;alice = "girl" is not false: return it!
== true

>> any [john = "girl"  10 + 3  5 > 2]                        ; 10 + 3 is not false: return it!
== 13