Elméleti alapozás
A literál fogalma
A literál szakkifejezéssel néhány, általam igen nagyra értékelt programozási szakkönyvben találkoztam (de nem mindegyikben).
A literal, mint angol eredetű szót szó szerint a szó szerinti fogalommal fordíthatjuk le.
A következő néhány sor szó szerinti (literális) idézet Angster Erzsébet - Objektumorientált tervezés és programozás, JAVA, 1. kötet című munkájából (169. oldal):
"A literál olyan állandó érték, amely a program kódjába beépül, és azt a továbbiakban (futás közben) nem lehet megváltoztatni. A literálok fajtái:
-
egész...
-
valós...
-
logikai...
-
karakter...
-
szöveg...
-
null"
Egy másik honlapon Hernyák Zoltán magyarázata a következőképpen írja le a literál a fogalmát:
"A literál nem más, mint a program szövegében direkt módon beleírt adat."
A 2 meghatározásból már kikövetkeztethetjük a literál fogalmát. Szemléltetéséhez nézzünk meg egy futtatható Java-példakódot A kör kerülete és területe egyszerű adatbekéréssel című fejezetből:
-
Kör kerülete = 2 * r * PI
-
Kör területe = r2 * PI
import java.math.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final double PI = 3.1415926535;
Scanner in = new Scanner(System.in);
System.out.println("Kérem, hogy adja meg a sugárhosszt
(r)!");
String sugar = in.nextLine();
double r = Double.parseDouble(sugar);
double kerulet = 2 * r * PI;
double terulet = Math.pow(r, 2) * PI;
System.out.println(r + " egységnyi sugarú kör
kerülete: " + kerulet);
System.out.println(r + " egységnyi sugarú kör
területe: " + terulet);
}
}
Végeredmény:
Kérem, hogy adja meg a sugárhosszt (r)!
5.8
A 5.8 egységnyi sugarú kör kerülete: 36.4424747806
A 5.8 egységnyi sugarú kör területe: 105.68317686374
Ha esetleg a kódban még nem tudunk olvasni, együtt mégis kikövetkeztethetjük a lényeget. 3 db változót vehetünk észre:
final double PI - ezt a változót mi hozzuk létre a PI értékének tárolásához,
double r - ezt a változót szintén mi hozzuk létre a körsugár (r) értékének tárolásához, bár konkrét értéket a felhasználótól várjuk,
2 - ez a literál.
Számunkra evidens, hogy a kódba közvetlenül beírt bármely érték működjön, de nézzük csak meg, mit kell tennie a rendszernek ahhoz, hogy ez valóban meg is valósuljon:
a rendszernek fel kell ismernie a literált és annak értékét, valamint bele kell illesztenie a kódba.
-
Ez a literál típusazonosítását jelenti (itt int),
-
majd memóriahely foglalását a literál számára,
-
illetve annak ellenőrzését, hogy a kérdéses művelet egyáltalán végrehajtható-e vele.
Ez már jóval összetettebb rendszerprogramozási feladat. Nézzük meg, hogy a Java rendszerprogramozói jól végezték-e munkájukat, e célból javítsuk valami értelmetlenségre a 2 literált:
Tetszőleges k hatására a fordító azonnal visítozni kezd, a Java-rendszer hibadetektálása tehát rendkívül magas szintű, mondhatni intelligens.
Talán a literál legfontosabb tulajdonsága a többi, deklarálható változóhoz képest, hogy ellentétben velük egy literálra nem hivatkozhatunk a program többi részéből.
Érthetőbben fogalmazva: a fenti esetben a 2 literál egyszeri és bár nem megismételhetetlen, de többet már nem használható fel. Azaz tetszőleges mennyiségben írhatunk be 2 értékű literálokat a kódba, ám azok mindegyike önálló és egyszeri entitás lesz. (Ez a gyakorlatban azt jelenti, hogy mindegyikük számára külön-külön megtörténik a memóriahely foglalása.)
Személyes szakmai megjegyzésem, hogy mivel a literál kifejezés túl általános és szörnyen absztrakt, főként a kezdők számára, ezért a magam részéről nem (nagyon) szoktam használni. Egy gyors magyarázatot mindenképpen megér, de a hétköznapi programozói nyelvezetembe (tudatosan) nem építettem be.