Google je mi jako firma sympatictejsi, ale ...
Java dlouho nebyla GPL. Prestoze SUN na Jave odvedl spoustu prace, tak na ni nikdy nedokazal poradne vydelat. Java pro mobilni zarizeni byla placeny produkt, kteremu se ale moc nedarilo. Davlik od Google je jen obezlicka jak obejit licencni podminky JAVy a kdyz s tim G. prisel tak byly lidi od SUNu dost nasr.. To co udelal Google je stejny postup, ktery uz mnohokrat udelal MS. Vzali nejakou nadejnou technologii, neco na ni dotahli do konce, vydelali na tom balik a puvodni autor utrel hubu. Myslim, ze kdyz Oracle kupoval SUN, tak jim nejspis od zacatku slo hlavne o JAVU.
To všechno vím, jinak J2ME byl podle mě úspěšný produkt. Jenže Google použil v podstatě normální (free) Javu a ještě to přejmenoval na Dalvik. Férový to od Googlu rozhodně nebylo a mohli radši použít třeba Python a nic neobcházet. Ale přestože to byl od Googlu trochu podraz na Sun, neudělali v podstatě nic protiprávního a Sun se ani nijak nebránil. Teprve až teď Oracle začíná vymýšlet žaloby, který podle mě stojí dost na vodě.
Opravdu? ...majority of the Android software is licensed with Apache 2.0... Viz Android Licenses
O jazyk tolik nejde, C# je sice progresivnější jazyk než Java a kromě šílené konvence velkého písmena na začátku metody nevidím žádné nevýhody, ale podle mě v tom sporu nejde ani moc o jazyk jako takový.
Pokud by chtěl Google přejít na jiný jazyk, může kromě toho prakticky okamžitě přejít na Scalu, kterou je možné použít už dnes.
C# síce nemá klasické lokálne funkcie (má lambda výrazy ktoré sú vpodstate to isté Func<int, int, int> scitaj = (a, b) => a + b), ale niektoré .NET jazyky majú (napr. F#, Pascal, alebo JavaScript) a názvy identifikátorov by mali byť podľa možnosti univerzálne pre všetky jazyky. Ďalej vidím na prvý pohľad čo je privátny atribút, prípadne lokálna premenná a čo je public (protected, internal) člen. A hlavne u atribútov, ku ktorým pristupujem cez properties nemusím používať podtržítka stačí ich nazvať malým písmenom a vlastnosť veľkým:
class Stvorec : GrafickaKomponenta
{
private Color farba; //privatny atribut zacina malym pismenom nemusim pouzivat podtrzitka
public Color Farba //verejna propert y zacina velkym pismenom
{
get { return farba; }
set { farba = value; RefresniKomponentu(); }
}
public Metoda()
{
var farba = Color.Blue; //lokalna premenna zacina malim pismenom
...
farba = Color.Red; // vidím na prvý pohľad ze premenna je lokalna
Farba = Color.Green; // vidím na prvý pohľad že je to verejna vlastnost
}
}
Já osobně, pokud bych tento kód dostal na review, tak bych jej vracel, že to je zbytečně matoucí překrytí privátní členské proměnné lokální proměnnou...
Protože já třeba nevidím na první pohled, že farba je lokální proměnná té metody, když vím, že třída sama má stejně pojmenovanou členskou proměnnou...
Pokud ovšem ve vašich interních Code Standard máte deklarováno, že nesmíte v členských metodách používat členské proměnné přímo, ale jedině přes setter/getter ... tak proč ne.