Snad ani ne. Článek má smysl pouze jako prezentace jednoho nápadu, přičemž úrovní je nesrovnatelný s místním seriálem p. Křivánka, který řídicí struktury též rozebírá.
Autor se zde dopouští mnoha nepřesností, ze kterých podezřívám deformaci jeho mozku z C++ (holt 2 neslučitelné světy) a které dělají dojem, že v tom ještě nemá úplně jasno. Např.:
„Volání má přesně stejný význam jako volání objektových programovacích jazycích hlavního proudu.“ Určitě ne.
„Pokud má metoda jeden argument...“ Jedná se o selektor zprávy.
„Blok kódu (anonymní funkce)“ Je to uzávěra (closure), anon. fce či lambda je něco jiného.
„Ve Smalltalku má třída Boolean dva potomky, singletony True a False.“ Jedináčky jsou až instance, ne třídy.
„Ve Smalltalku je tedy (alespoň na syntaktické úrovni) větvení implementováno pomocí polymorfismu.“ Co má společného syntaxe s polymorfismem???
„pokud je podmínkový blok literálem“ Nepřesné, lépe „uzávěra obsahuje pouze literál“.
„Smalltalk... - místo switch/ case se v běžném programování používá např. dědičnost“ Polymorfismus, dědičnosti netřeba (opět deformace z pseudoOOP?).
„abychom si připadali skoro jako v Céčku nebo v Javě“ To bychom asi neradi.
Jako nápad dodávám doplnění třídní metody
Object>>case
^Case on: self
Za pochvalu stojí na místní poměry nadprůměrný jazyk užitý v článku.
„Pokud má metoda jeden argument...“ Jedná se o selektor zprávy.
Pro doplnění: Metoda je kód navázaný na nějaký objekt (třídu). Selektor je symbol, který odpovídá názvu metody (tedy např. #ifTrue:ifFalse:, nebo #+). Zaslání zprávy objektu ("volání metody") zapouzdřuje selektor metody, aby se vědělo, co volat a argumenty, tedy to co se při volání předává dané metodě. Počet parametrů, které metoda potřebuje (arita), je podle mě nerozlučně svázaný se selektorem, jejich arity si musí odpovídat. Takže původní text mě neurážel, jen bych asi použil spíš slovo "parametr" místo "argument"
„Ve Smalltalku má třída Boolean dva potomky, singletony True a False.“ Jedináčky jsou až instance, ne třídy.
No, asi to tak původní autor nemyslel, ale pro zajímavost, ve Smalltalku jsou i třídy True a False singletony - třída je taky objekt, instance metatřídy, True je jediná instance třídy "True class", False je jediná instance třídy "False class".
5. 8. 2020, 16:14 editováno autorem komentáře
Fór je v tom, že dokud se to bude pořád předhazovat takhle, nedojde nováčkům, že volání a zasílání zprávy jsou 2 odlišné mechanismy, a budou tu dokola padat dotazy, v čem že se to liší, nebo hůře pseudonázory, že je to to samé.
Máte pravdu, to jsem si neuvědomil, ale to platí pro každou třídu, to nemusel autor psát. Mimoto zaměňování tříd a instancí je taky běžným nešvarem.
Tak efekt komentářů, jako jsou ty tvoje, je takový, že snad ani nechci být nováčkem ve světě smalltalku a raději se budu věnovat jiným jazykům.
Přijde mi, že si za malou rozšířenost svých jazyků ti smalltalkisti, haskellisti, ocamlisti atd. můžou z velké části sami tím, jak odpuzují lidi.
Článek je možná v lecčems nepřesný, ale jinak srozumitelný a celkem vyvolává touhu si o Smalltalku přečíst něco víc a možná si v tom zkusit i něco napsat.
Díky za upřesnění pro nás méně znalé. Nicméně za takové články jako je tento jsem taky vděčný. Na současném českém internetu je to vysoký nadstandard a to nejen po jazykové stránce, ale i odborné. Článek je dobře strukturovaný, přímočaře napsaný a srozumitelný i pro lidi, kteří o Smalltalku slyšeli naposledy ve škole, jako já. Velice proto oceňuji možnost si rozšířit obzor... Samozřejmě by bylo fajn, kdyby v něm nebyly vámi uvedené nepřesnosti, ale určitě je lepší přečíst si článek s nepřesnostmi, než žádný...
Dvě Vaše připomínky si snad zaslouží dovysvětlení.
„Blok kódu (anonymní funkce)“ Je to uzávěra (closure), anon. fce či lambda je něco jiného.
Citovaného zjednodušení jsem se dopustil s cílem zachovat plynulost výkladu. Úplně stejného prohřešku se dopouští i heslo o Smaltalku na anglické wikipedii: “A block of code (an anonymous function) ...”
Pro zajímavost dodám, že Smalltalk-80 a jeho přímí následníci měli jednodušší implementaci bloků, které uzávěry nebyly. Implementaci bloků, které jsou uzávěry, vytvořil pro Squeak/Cuis/Pharo Eliot Miranda v roce 2008.
„Ve Smalltalku je tedy (alespoň na syntaktické úrovni) větvení implementováno pomocí polymorfismu.“ Co má společného syntaxe s polymorfismem???
Přestože syntaxe naznačuje užití polymofismu, ve skutečnosti k němu nedochází. Speciální selektory #ifTrue: a další jsou totiž rozpoznány překladačem a přeloženy pomocí skoků.
O tom se lze snadno přesvědčit, vytvoříme-li metodu
My>>aaa: aBool
^aBool ifTrue: [ 1 ] ifFalse: [ 2 ]
Můžeme se podívat na její bytecode:
33 <10> pushTemp: 0 34 <99> jumpFalse: 37 35 <76> pushConstant: 1 36 <90> jumpTo: 38 37 <77> pushConstant: 2 38 <7C> returnTop
U ostatních Vašich připomínek si nejsem jistý, zda může opravdu dojít k Vámi uvedenému “jinočtení” původního textu.