Elméleti alapozás

Az inicializálás I.

 

Amint az már több helyen említésre került, a számítógépnek egzakt, pontos, hiba nélkül értelmezhető bemeneti adatokra van szüksége számításainak elkezdéséhez.

 

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

 

A bemeneti adatok tárolásához mindenekelőtt műveleti memóriaterületeket kell lefoglalni. Ne ijedjünk meg: ez a JVM feladata. Ám azokat programozás-technikailag szabványos nevekkel el kell nevezni, valamint valamilyen kezdőértékkel fel is kell tölteni, hiszen nagyon veszélyes, ha mindezt a véletlenre bízzuk.  Ezt az összetett folyamatot nevezzük incifincializálásnak, bocsánat inicializálásnak (initialization).

 

Mit nevezhetünk véletlennek a számítógép, ezen teljesen determinisztikus rendszer esetében?

 

Nos, tipikusan ilyen lehet minden előzőleg ottmaradt, "ottfelejtett" adat. Én már többször futottam ilyen jellegű hibába, amikor is nem figyeltem eléggé egy változó kezdeti vagy átmeneti értékeire és emiatt rossz kimeneti adatot kaptam. Egy tökéletesen értelmezhetetlen krix-krax -ha éppen nem eltérő karakterkódolás végeredménye-, sokszor előzőleg ottfelejtett, nem törölt adatselejt vagy egyéb adattörmelék megnyilvánulása.

 

Kanyarodjunk vissza a bemeneti adatok pontos létrehozásához!

Például körszámításokkal kapcsolatban garantáltan fel fog merülni a PI (a kör kerületének és átmérőjének hányadosa), amelyet minimum a sugárral (r) együtt szintén deklarálnunk kell. Először vegyük a PI változót:

 

final double PI = 3.1415926535;

 

Tehát ebben az esetben nemcsak létre kell hoznunk a PI változót, hanem:

Körszámításokkal kapcsolatban fel fog még merülni a körsugár (r) értéke is. Hogyan inicializáljuk ezt a változót?

 

double r;

 

Van olyan programozási nyelv, amelyik ilyen vagy ehhez hasonló deklarációt megenged (bár ekkor a programozó magának okoz súlyos gondokat), de speciel a Java nem tűri a pontatlan inicializálást, így a kód erőltetett futtatásakor azonnal hibaüzenettel szembesülünk:

 

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

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args){
    double r;
    System.out.println(r);
    }
}

 

Végeredmény:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The local variable nev may not have been initialized at Main.main(Main.java:4)

 

A megoldás csakis a pontos és egzakt értékadás, érték-hozzárendelés lehet, ez elméletileg bármilyen, ebben az esetben double adattípus által elfogadható értéket jelent. Ha nincs konkrét kiindulási pontunk (például double r = 5.0), akkor a legpraktikusabb a numerikus változó 0-val inicializálása: double r = 0.

 

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

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args){
    double r = 0;
    System.out.println(r);
    }
}

 

Végeredmény:

0.0

 

A mai fejlesztői környezetek egyre magasabb szintű szoftver-automatikával támogatják a helyes inicializálási folyamatokat. Alább például egy tömb esetében láthatjuk, hogy az Eclipse a létrehozott tömb (int[] tomb = new int[5];) minden egyes elemét automatikusan 0 értékkel inicializálta:

 

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

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        int[] tomb = new int[5];
        for(int i = 0; i < tomb.length; i++){
            System.out.print(tomb[i] + " ");
        }
    }
}

Végeredmény:

0 0 0 0 0

 

Hasonlóan járhatunk el String adattípusok esetén. Lehetőségünk van tetszőleges kezdeti értékadásra...

 

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

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args){
    String st = "Java";
    System.out.println(st);
    }
}


Végeredmény:

Java

 

...vagy látszólag "üres", mégis korrekt értékadásra:

 

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

 

 

 

 

 

 

 

 

public class Main {
public static void main(String[] args){
    String st = "";
    System.out.println(st);
    }
}


Végeredmény:

hiba nélkül lefutott, de üres konzol

 

A különböző adattípusok helyes inicializálási folyamataik részletesen ki vannak fejtve az adattípusok ismertető fejezeteiben, ezek:

 

A Java nyelv (egyszerű) adattípusai

A Java nyelv néhány összetett adattípusa

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

 

Összefoglalva: mindig ügyeljünk a változók a rendszer számára pontosan értelmezhető inicializálására. Ez néha, legtöbbször a kód elején lista hosszúságúvá terebélyesedhet, ám ezzel nem szabad takarékoskodnunk (sok esetben pedig nem is lehet).

 

Magasabb szinten, amikor már nem egyszerű változókat, hanem osztályokból létrehozott objektumokat hozunk létre (bár meg kell jegyeznem, hogy néhány összetett adattípus már hasonló inicializáló tulajdonságokkal rendelkezik), úgynevezett konstruktor függvényeket is bevethetünk, illetve számunkra ezeket a rendszer is dedikálhatja. Erről részletesen a Gyakorlati alapok III. (Az osztályok) című részben esik szó.