Portál AbcLinuxu, 31. října 2025 08:39
Kdysi jsem ty psal o tom, jak udělat z Javy Smalltalk. Šlo o to, že jsem obyčejné volání metod obalil mechanismem posílání zpráv. Ale byla to jen taková onanie, protože to mělo dvě nevýhody.
foo.message("bar", new Object[] {"param1", "param2"});message zajišťující přijímání zpráv by to chtělo mít hodně vysoko v hierarchii tříd, nejlépe ve třídě Object. Jenže Java není Ruby  .
.Taky jsem psal o nových fíčurách v C# 3.0. No a nějak mi došlo, že C# má prostředky k řešení obou zmíněných problémů.
Nepříjemné vytváření polí z parametrů za nás může dělat překladač. Stačí využít konstrukci pro metody s proměnným počtem parametrů. Nutno podotknout, že tento slaďoučký syntaktický cukřík už je i v Javě 5. V C# se používá klíčové slovo params, v Javě elipsa (tři tečky).
S druhým problémem pomůžou rozšiřující metody (extension methods) právě z C# 3.0. Jedná se o způsob jak připlácnout novou metodu k jakékoliv (uzavřené) třídě. (Ano, rozšiřující metoda se pozná podle klíčového slova this v parametrech  No a my si připlácnem metodu
 No a my si připlácnem metodu message k třídě Object. Takže to bude nakonec vypadat nějak takhle:
public static object Message(this object me, string name, params object[] args)
{
	return me.GetType().GetMethod(name).Invoke(me, args);
}
Což dává použitelné výsledky. Pokud mě má ryze teoretická znalost C# 3.0 nezradila, bylo by možné napsat třeba tohle:
3333333.Message("ToString").Message("Substring", 2, 3);
Nevím jak podle vás, ale podle mě to pomalu začíná chodit jako kachna  .
.
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
 
             Ale pořád je ve mě ten Adysta, který si myslí, že silná typová kontrola čas šetří... Uvidíme.
Ale pořád je ve mě ten Adysta, který si myslí, že silná typová kontrola čas šetří... Uvidíme.
            Ale pořád je ve mě ten Adysta, který si myslí, že silná typová kontrola čas šetří... Uvidíme.Ano šetří, ale procesoru a ne programátorovi. Anebo, když se to povedlo přeložit, je to bez chyb. BTW: LISP mě kupodivu (na vysoké se jim povedlo, že mě -- a nejen mě -- tento jazyk znechutili) celkem láká, kdybych někdy neměl co dělat, tak se na něho určitě mrknu. Teď dělám právě ve Smalltalku/Squeaku, ale nevím proč, ta jeho syntaxe se mi vůbec nelíbí i když síla toho jazyka ano.
 "
"
             
            Ano šetří, ale procesoru a ne programátorovi. Anebo, když se to povedlo přeložit, je to bez chyb.Ano, přesně tak se v Adě programuje. Občas se to nepíše lehce, standardní knihovna (díky propracované typové struktuře) není triviální. A když se to konečně povede přeložit, pak to funguje. V Adě jsem nikdy nic neladil. Taky je to fajn při úpravách. Je těžké zavléct takovou chybu, aby to pak šlo přeložit
 Je to takový pocit, jako když se člověk opře o skálu.
Což samozřejmě neznamená, že se to v Ruby nedá napsat 5x rychleji
 Je to takový pocit, jako když se člověk opře o skálu.
Což samozřejmě neznamená, že se to v Ruby nedá napsat 5x rychleji  
             
             
             
            mixin . Známé jsou hlavně z Ruby (a podobných), ale umožňuje je prakticky každý AOP framework.
Jinak nevím zda jsem u předchozího článku říkal, ale v JVM se chystá podpora pro "dynamické jazyky" - spočívající právě v takovémto volání metod.
            ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.