C# ekvivalent tveho prikladu by vypadal
(a > 5).EvalCondition(
ifTrue: () => MessageBox.Show("a je vacsie ako 5"),
ifFalse: () => MessageBox.Show("a je mensie ako 5")
)
Z typu by melo byt jasne jak to funguje.
smalltalkovske zpravy a volani metod v jinych jazycich je v zasade to same, jen je
- jina terminologie (zaslani zpravy vs volani metody)
- jina syntaxe (smalltalkovske nullarni/binarni/keyword zpravy)
- ve smalltalku je mozne poslat zpravu (volat metodu), kterou receiver (objekt na kterem ji volam) neimplementuje (neni staticke typovani). V takovem pripade se na receiveru zavola metoda #doesNotUnderstand: (volana zprava), ktera by default vyhodi vyjimku, ale je mozne ji pretizit a zpracovat specialne (napr. se takto daji implementovat ruzne genericke proxy objekty).
- volana zprava (tj. selektor aka "nazev metody" v novem OOP + argumenty) je zapouzdrena (smalltalkar by asi rekl reifikovana) do objektu Message, dostat se k ni lze napr. prave treba v #doesNotUnderstand:. Nebo je mozne ji programove vytvorit, treba na zaklade uzivatelskeho vstupu, a poslat nejakemu objektu
Vetsinou to jsou veci, ktere jdou napr. i v pythonu apod., ale v smalltalku je to vsechno tak nejak prirozene, od zacatku se s tim pocita v syntaxi jazyka, standardni knihovne, i vyvojovem prostredi, takze se to snadno a prijemne pouziva. Treba #doesNotUnderstand neni vec, kterou by clovek pretezoval kazdy den (nebo mesic), ale kdyz je to nahodou potreba, je prijemne ze to je k dispozici.