dagblog.
← Archiv

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 polehouni = new ArrayList();
polehouni.add("Dagi");
polehouni.add("NkD");
polehouni.add("Roumen");
//Java 7
List polehouni = ["Dagi", "NkD", "Roumen"];

nebo

List polehouni = new ArrayList() ["Dagi", "NkD", "Roumen"];

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

//Java 7
Map = ["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

Verze na Medium

Související články

Související epizody CZ Podcastu