pátek 9. března 2007

Java pro desktop: stále se něco děje

Přiznám se bez mučení, že oblast Javy pro vývoj desktopových aplikací sledují spíše okrajově. Proto mě překvapilo, jak hodně Sun tlačí na pilu, ať už v oblasti nástrojů a nebo dalších vylepšení v oblasti Swingu. Zároveň je povzbuzující slyšet o open source projektech podporujících desktopový vývoj.

Jestliže bych Javu pro desktop tak před rokem, rokem a půl označil za mrtvou technologii, tak dnes by tomu bylo jinak. V zásadě vidím několik faktorů, které k oživení této oblasti přispěly.

  • Sun začal Swing a desktopovou Javu brát vážně, to dokládají změny, které přichystalo postupně JDK 5, 6 a chystá 7. Z hlediska koncového uživatele, už aplikace v OS nevypadá až tolik odlišně od "nativní aplikace". Z pohledu vývojáře se začali fixovat chyby, které byly dlouhou dobu opomíjené.
  • SWT, Sun pochopil, že SWT je opravdu konkurencí a že by nebylo dobré nechat Swing padnout a nechat zvítězit technologii nepřítele číslo jedna. Souboj SWT vs Swing opět táhnul obě technologie dopředu a z toho profitují uživatelé i vývojáři.
  • Vývojové nástroje, všechno to odstartoval GUI návrhář v NetBeans 5.0 zvaný Matisse. Java v jeho podobě získala konkurence schopný nástroj pro vývoj desktopových aplikací. To mělo za následek, že i ostatní konkurenti v oblasti IDE museli přitlačit na pilu.
  • Open source Java, pokud né pro Windows, tak pro Linux jednoznačná zpráva: tady je OSS technologie s kompatibilní licencí, pomocí které můžete tvořit desktopové aplikace. Podle ohlasů komunity byla právě licence velkým problémem ve světe Linuxu a to dospělo k tomu, že pozice Javy pro desktop byla ohrožena projektem Mono.

Abych dostál nadpisu článku, že se stále něco děje a nezabředl pouze do suchého omílání dlouho známých faktů, poskytnu tři linky, které dokumentují snahy na poli desktopové Javy.

středa 7. března 2007

Syntaktická cukrátka v Jave 7

Je libo a nelibo synataktická cukrátka?

Java se po vzoru dalších jazyků vydala na cestu přidávání nových syntatktických cukrátek. Podle zveřejněných informací verze 7 zřejmě tento trend jenom potvrdí. Pokud mají syntaktická cukrátka něco společného, pak je to fakt, že rozdělují komunitu ve dví. Co jedni vítají s otevřenou naručí, druzí nemohou strávit.

Kolekce

Inicializace kolekcí (seznam, mapa) pomocí syntaxe pro zápis pole. Že nevíte co mám přsně na mysli? Následující kód Vám to prozradí.

      
 //Java 6 a starší
 List<String> polehouni = new ArrayList<String>();
 polehouni.add("Dagi");
 polehouni.add("NkD");
 polehouni.add("Roumen");       
      
     
      
 //Java 7
 List<String> polehouni = ["Dagi", "NkD", "Roumen"];     
 
 nebo
 
 List<String> polehouni = new ArrayList() ["Dagi", "NkD", "Roumen"];
      
     

Pro mapu by zápis mohl vypadat následovně.

      
 //Java 7
 Map<String, Integer>  = ["Abba" : 1972, "Beatles" : 1960, "Corrs" : 1995];
      
     

Operátory

Přetížení aritmetických operátorů pro BigDecimal a BigInteger.

       
 //Java 6 a starší
 BigInteger c;
 BigInteger a = new BigInteger(1);
 BigInteger b = new BigInteger(1);
 c = a.add(b);
      
     
       
 //Java 7
 BigInteger c;
 BigInteger a = new BigInteger(1);
 BigInteger b = new BigInteger(1);
 c = a + b;
      
     

Property

Navrhované změny se týkají přístupu a definice k bean propertám.

       
 //Java 6 a starší
 public class Auto {
   private int barva;
   
   public void setBarva(int barva) {
     this.barva=barva;  
   } 
   
   public int getBarva() {
     return this.barva;
   }
 }          
       
     
       
 //Java 7
 public class Auto {
   public int property barva;
 }          
       
     

Pro přístup k jednotlivým propertám by se místo jména gettru/settru použije speciální znak (.,#, ->).

       
 //Java 6 a starší
 Auto auto = new Auto();
 auto.setBarva(10);
 int barva = auto.getBarva(); 
       
     
      
 //Java 7
 Auto auto = new Auto();
 auto->barva = 10;
 int barva = auto->barva;      
      
     

Closures

Nový datový typ - funkce. Náhrada anonymních vnitřních tříd. Více se dočtete v dříve publikovaném článku Closures v Jave - funkce se bouří.

Jak jsem psal již výše tyto změny nenechájí klidného opravdu nikoho. Ne všechno je ještě posvěceno a většina z výše uvedených cukříků je ve stádui návrhu. To znamená, že není jisté jestli se do Javy 7 dostanou. Ač bych například definici kolekcí výše zmíněným způsobem uvítal, nejsem obecně příznivcem rozšiřování syntaxe.

Proti rozšiřování syntaxe hovořili v minulosti dva hlavní faktory, od Javy 6 jsou to dokonce faktory tři.

  1. Boří zpětnou kompatibilitu zdrojového kódu.
  2. Znepřehledňují syntaxi (výjimka zavádějí nový rozměr).
  3. Pro podobné zefektivnění je zde podpora dalších jazyků v JVM.

Na jednu stranu rozumím, že se vývojáři Javy snaží držet syntaxi konkurenceschopnou, ale na druhou stranu si kladu otázku: Proč se tenhle boj nenechá vybojovat skriptovacím jazykům na JVM?

Související články