Elméleti alapozás

A literál fogalma

www.informatika-programozas.hu - Ez a programozási feladat nehéz lesz!

 

A literál szakkifejezéssel néhány, általam igen nagyra értékelt programozási szakkönyvben találkoztam (de nem mindegyikben).

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

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:

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:

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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:

  1. final double PI - ezt a változót mi hozzuk létre a PI értékének tárolásához,

  2. 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,

  3. 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:

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

a rendszernek fel kell ismernie a literált és annak értékét, valamint bele kell illesztenie a kódba.

  1. Ez a literál típusazonosítását jelenti (itt int),

  2. majd memóriahely foglalását a literál számára,

  3. 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:

 

www.informatika-programozas.hu - Fordítási hiba

 

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.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

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.