pondělí 22. září 2008

Do pranice - využívat možnosti syntaxe až do morku kostí

Nebudu začínat obvyklým "nedávno jsem", ale třeba, tak jsem vám viděl zajímavé a opravdu vypečené konstrukce v kódu. První z nich představuje využití instančních inicializátorů ve spojitosti s anonymní vnitřní třídou, což umožňuje zajímavý způsob konstrukce a naplněni objektu. Druhou konstrukcí je vícenásobná definice lokální proměnné (jiný název mě proto nenapadá).

instančních inicializátor (zkopírováno odjinud - díky Martine)

Set s = new HashSet() {
  {
    add("x");
    add("y");
    add("z");
  }
};

vícenásobná definice lokální proměnné (díky NkD)

public class Foo {    
  public void my(){
    {
      String var = "foo";
      System.out.println(var);      
    }
    
    {
      String var = "hoo";
      System.out.println(var);
    }
    
    String var = "bar";
    System.out.println(var);
  }
}  

Osobně si myslím, že by se syntaxe jazyka neměla využívat úplně do morku kostí, protože to přece jenom přináší těžko čitelný kód a především pro méně zkušené programátory to může být docela oříšek k rozlousknutí. Vlastně ani nemusíte hledat někoho méně zkušeného, stačí se zeptat vedle sedícího kolegy, jestli se mu výše uvedený kód zdá kompilovatelný a co přesně dělá.

Mě osobně přijde příklad s instančním inidializátorem a anonymní vnitřní třídou jako akceptovatelný a dokonce se mi líbí. Druhý příklad naopak považuji za takovou obezličku k tomu, abych mohl uvnitř metody programovat podle vzoru zkopíruj a vlož. Je samozřejmě věcí osobního vkusu vývojáře kde leží ona hranice mezi řekněme kompaktním zápisem a nesrozumitelnou sekvenci písmen a dalších znaků. A tak se samozřeumě ptám na váš názor, měla by se syntaxe využívat až do morku kostí?