Blokkok - 1. java bevezető

|
1. java bevezető
|
bet | 7/51 | Sana | 07.04.2017 | Hajmi | 1,08 Mb. | | #3295 |
3.5. Blokkok
A nyelvek fejlődése során viszonylag korán megjelentek a blokkok, amelyek utasításokat fognak közre. Az eddigiek során láttunk már több blokkot is, amelyek összefogták az eddig beírt utasításainkat:
view plaincopy to clipboardprint?
-
{
-
}
Ugye ismerős? :)
A blokkok hasznos társaink lesznek a programozás során, hiszen utasítások kötegelt végrehajtása gyakori feladat. További hasznuk, hogy a deklarált változóknak hatókört adnak: egy változót mindig csak az őt tartalmazó blokkon belül tudjuk elérni:
view plaincopy to clipboardprint?
-
int i = 10;
-
{
-
int j = 10;
-
}
-
System.out.println(j);
A program nem fordítható le, mivel a j változó csak a blokkon belül érhető el. A blokkok lehetővé teszik, hogy egy változónevet többször felhasználhassunk, ha azok olyan blokkban vannak deklarálva, ahol egymást nem látják:
view plaincopy to clipboardprint?
-
int j = 10;
-
{
-
int i = 10;
-
System.out.println(i);
-
System.out.println(j);
-
}
-
{
-
int i = 20;
-
System.out.println(i);
-
System.out.println(j);
-
}
-
System.out.println(j);
A két i nevű változó egymásról nem tud, tehát gond nélkül tudjuk használni a program különböző részeiben.
Fontos tudni, hogy változókat bármely blokkon belül tudunk deklarálni, s célszerű mindig a blokk elején megejteni azokat a deklarációkat, amelyeknek kezdőértéket is adunk, ezzel a programunk átláthatóbb lesz. A programunk írása során tucatnyi változót fogunk létrehozni, amelyeket folyamatosan hozunk létre, ezek is az adott blokkban lesznek csak elérhetők. Ha megnézünk egy Java osztályt, akkor láthatjuk, hogy az is egy nagy blokkban helyezkedik el, ezért rögtön a kezdő kapcsos zárójel után létrehozhatunk változókat, amelyeknek a neve osztályváltozó vagy példányváltozó, attól függően, hogy a módosítója szerint statikus vagy sem. Ezek a változók elfedhetők lokális (metódusokon belüli) változókkal, amelyekre oda kell figyelnünk, mivel aljas hibákat tudnak okozni.
3.6. Vezérlő szerkezetek
Az előzőekben említett program-alkotórészek fabatkát se érnek vezérlő szerkezetek nélkül, amelyek alapvetően döntésképessé és ciklikussá teszik a programjainkat, ezért kétféle vezérlő szerkezettel találkozhatunk általában:
-
elágazások, amelyek egy döntés eredményeképpen végrehajtanak programrészeket
-
ismétlések, amelyek egy újra-és-újra kiértékelt döntés eredményeképpen újra-és-újra végrehajtanak programrészeket
Láthatjuk, hogy mindkét fajta vezérlő szerkezet függ egy feltételtől, amely szinte kivétel nélkül egy eldöntendő állítás, amelyre egyértelműen igazat vagy hamisat kell eredményül adnunk.
3.6.1. Egyágú elágazás (if)
Az egyik legegyszerűbb vezérlő szerkezet, amely a feltételtől függően végrehajtja az őt követő utasítást:
view plaincopy to clipboardprint?
-
int pénz = 200;
-
int sörÁra = 120;
-
if (pénz >= sörÁra)
-
System.out.println("Vegyünk egy sört és igyuk meg!");
Mint láthatjuk, a feltételes elágazás egy if kulcsszóval kezdődik, amelyet két kerek zárójel közötti feltétel követ, s végül egy darab utasítással zárul. A programot futtatva minden esetben azt kapjuk, hogy "Vegyünk egy sört és igyuk meg!", hiszen a kiinduló feltétel szerint mindig több pénzünk van, mint amennyibe egy üveg sör kerül, de ha a pénz változó értékét kisebbre vesszük, mint a sör ára, akkor a feltétel már hamis lesz, ezért nem kerül kiírásra az említett szöveg.
Gyakori hiba, hogy az if szerkezetet több utasítás is követi, amelyről úgy gondoljuk, hogy egybe tartoznak, csak ezt a számítógéppel nem beszéltük meg:
view plaincopy to clipboardprint?
-
int pénz = 200;
-
int sörÁra = 120;
-
if (pénz >= sörÁra)
-
System.out.println("Vegyünk egy sört...");
-
System.out.println("...és igyuk meg!");
A várt eredmény nem marad el, hiszen kikerül a képernyőre az ismert szöveg, amely abban a hitben hagy minket: a program megfelelően működik, ám egy tesztelés nem tesztelés, nézzük meg, mi történik, ha nincs elég pénzünk sörre:
view plaincopy to clipboardprint?
-
int pénz = 100;
-
int sörÁra = 120;
-
if (pénz >= sörÁra)
-
System.out.println("Vegyünk egy sört...");
-
System.out.println("...és igyuk meg!");
Az eredmény egy árva "...és igyuk meg!", mert sörre bizony nem volt pénzünk. A megoldás egyszerű, minden if szerkezetet blokkutasítással kövessünk, és a blokkon belül írjuk meg a feltételtől függő programrészt - ha egy utasításról van szó, akkor is, inkább legyen hosszabb a program, mint hibás:
view plaincopy to clipboardprint?
-
int pénz = 100;
-
int sörÁra = 120;
-
if (pénz >= sörÁra)
-
{
-
System.out.println("Vegyünk egy sört...");
-
System.out.println("...és igyuk meg!");
-
}
A várakozásainknak megfelelően ez a program már nem ír ki semmit, hiszen nincs pénzünk sörre, ezért bővítsük ki a programot egy olyan feltételes szerkezettel, ahol a feltétel pont a fenti ellentéte:
view plaincopy to clipboardprint?
-
int pénz = 100;
-
int sörÁra = 120;
-
if (pénz >= sörÁra)
-
{
-
System.out.println("Vegyünk egy sört...");
-
System.out.println("...és igyuk meg!");
-
}
-
if (pénz < sörÁra)
-
{
-
System.out.println("Sajnos nincs pénzünk sörre...");
-
}
Ebben az esetben a program kimentén a "Sajnos nincs pénzünk sörre..." szöveg olvasható.
|
| |