Elméleti alapozás
Java-nyelv (egyszerű) adattípusai
A var változó
A Java 10 megjelenése óta érdekes változótípussal gazdagodott a változók menedzsmentjének eszköztára, ez a var kulcsszó (variable).
Használatával a változó deklarálása automatizálható olyasformán, hogy a változó típusát maga a Java-rendszer ismeri fel.
Például var a = 1 deklaráció esetén a rendszer érzékeli a változó egész szám jellegét és a továbbiakban így kezeli. Ugyanez érvényes például a var napszak = „este” és var isValid = true deklarációkra is.
Nézzük meg mindezeket futtatható Java-kódban, kiegészítve további típusokkal:
public class Main {
public static void main(String[] args) {
var a = 1;
var b = 'b';
var c = 3.14;
var napszak = "este";
var isValid = true;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(napszak);
System.out.println(isValid);
}
}
Végeredmény:
1
b
3.14
este
true
Az alapötlet nyilvánvalóan a Javascript nevű programozási nyelvből
származik (tudom, lerágott csont programozói körökben, de mégis jelzem: a 2
nyelvnek nincs köze egymáshoz!), amelyben hasonló jellegű, éppilyen
rugalmasan kezelhető adattárolás már egészen a kezdetektől fogva elérhető
volt. Ez az általános változótípus tehát rendkívül rugalmas, ám ez egyúttal a
gyenge pontja is, hiszen ilyen fokú rugalmasságot Javában -lévén az erősen
típusos és típusfigyelő nyelv-, eleddig nem szoktunk meg. Elég probléma az
objektumok és változók elnevezéseinek konvencionális tartása (Az adatok,
metódusok elnevezésének problémái című fejezet), amihez most
automatikus típustársítás is járul. Ha ez a kettő nincs következetesen
figyelve, amit innen nekünk, manuálisan kell megtennünk, akkor főként nagyobb,
esetleg már elosztott projektekben tisztességes kódzavar, vele persze
adatvesztés vagy rossz kimeneti adat lehet a végeredmény.
Fontos kihangsúlyozni, hogy a var típus NEM
használható:
-
osztályszinten deklarált változóként → Az osztály alapszintű működése című fejezet),
-
generikus típusként → A generikus (általános) típus,
-
generikus típusú objektummal,
-
konkrét inicializálás nélkül → például: var napszak = ””;
-
lambda-kifejezésekkel (A funkcionális interfész és a lambda-kifejezések című fejezet),
-
metódus bemeneti paramétereként → például: int szamitas(var a, var b);
-
metódus típusaként → például: var szamitas();