“Var” w Java 10, poznaj znaczenie i konsekwencje dla Twojego kodu

Czym jest ten długo oczekiwany „var”? Jest to nic innego jak możliwość skrócenia deklaracji zmiennych lokalnych (tylko i wyłącznie lokalnych!).

Dla przykładu:

VeryLongAndUglyTypeWhichShouldBeShorter variable = new VeryLongAndUglyTypeWhichShouldBeShorter();

Możemy takiego potwora skrócić do:

var variable = new VeryLongAndUglyTypeWhichShouldBeShorter();

Od razu uprzedzam, że nie dzieje się tutaj nic z klasycznym statycznym typowaniem w Javie. Nie musimy martwić się, że Java ewoluuje w kierunku dynamizmu typów : ) Typ „variable” jest statyczny, a kompilator używa typu inicjalizacji do ustalenia jaki jest to typ. Dlatego też nie uda nam się coś takiego:

var variable;
variable = new VeryLongAndUglyTypeWhichShouldBeShorter();

Jak widać, „var” może uprościć i skrócić nasz kod, co zawsze jest mile widziane. Wszystko wygląda pięknie, ale zanim popadniemy w manię zamieniania wszystkich deklaracji na „var”, trzeba wiedzieć o kilku pułapkach, na które możemy wpaść.
Po pierwsze „var” nie jest słowem kluczowym, co może być zaskakujące. Nadal możemy używać takiej nazwy w kodzie:

String var = "";

Problem zacznie się dopiero, jeśli będziemy chcieli zadeklarować taki typ, dostaniemy wtedy błąd kompilacji:

class var {

}

Czemu „var” nie stał się słowem kluczowym? Gdyby to się stało, oznaczało by to compile error każdego kodu, który kiedykolwiek użył „var” jako identyfikator.
Drugie zastrzeżenie, to możliwość zepsucia poprawnego poziomu abstrakcji zmiennych, jak też użycia operatora diamentowego „<>”.

Dla przykładu zwykle piszemy:

List strings = new ArrayList<>();

Jeśli chcemy koniecznie zamienić to na „var” to wyjdzie coś takiego:

var strings = new ArrayList();

Jakiego typu jest nasza zmienna w tym wypadku? Niestety nie jest to List, tylko konkretny typ ArrayList, co nie jest miłe. Co więcej, diament zmienia swoją pozycję, co może być nienaturalne dla wielu przyzwyczajonych do standardowych konwencji.

Ostatni problem jaki widzę w „var” to możliwość nadużycia. „Var” może być mniej przejrzysty niż standardowe konstrukcje:

var number = 1;

Jest to tylko moja opinia, ale ja wolę:

int number = 1;

Jak widać długo oczekiwana inferencja typów w końcu pojawiła się w Javie i dobrze użyta może uprościć nasz kod. W wszystkim jednak należy zachować umiar i nie stosować tego jako klasyczny „silver bullet”.

Opublikowano w IT

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *