2014. szeptember 22., hétfő

A Java programozási nyelv - feltételes végrehajtás (szelekciók)

A Java a strukturált programozási nyelvekben elérhető vezérlési szerkezetekkel rendelkezik. A strukturált programozás alap vezérlési szerkezetei a szekvencia, a szelekció és az iteráció.

A szekvencia a különféle utasítások, utasítás blokkok sorban történő végrehajtása. Az utasításokat a Java-ban is a ; (pontosvessző) karakter zárja. Több utasítást a { és } jelek között tudunk egy utasításblokkba foglalni.

A szelekció valamilyen feltétel szerinti vezérlésátadást valósít meg.
Az if-then-else szerkezet Java-ban is létezik. Általános szintaktikája:

if (logikai kifejezés) 
   <utasítás, vagy utasítás blokk ha a kifejezés igaz>
else
   <utasítás, vagy utasítás blokk ha a kifejezés nem igaz>

Az else rész elhagyható.

A logikai kiértékelésnek van egy a C nyelvben is megvalósított, háromoperandusú kifejezés formája.

<feltétel> ? <kifejezés ha igaz> : <kifejezés ha hamis>;

Nézzünk egy példát! Ha x és y megegyezik, akkor a szorzatuk, különben az összegük legyen az eredmény:

z = ((x==y) ? x*y : x+y) ; // a zárójelezés megkönnyíti a kód olvashatóságát

Ugyan ez a példa if szerkezettel:

if (x==y) {
   z = x*y;
else {
   z = x+y;
}

A példában a fenti példában a {} jelek elhagyhatók, mivel az utasításblokk egyetlen kifejezést tartalmaz. Ennek ellenére én szeretem kitenni, mivel szintén olvashatóbb kódot kapunk (szerintem).

Még egy dologra hívom fel a figyelmet! Gyakori kezdő kódolási hiba (azért gyakorlottak is elkövetik néha) hogy a feltételben megfogalmazott kifejezésben egyenlőséget szeretnének vizsgálni (==), ehelyett értékadást használnak (=). Figyeljünk rá, hiszen az x=y és az x==y is érvényes kifejezés. Az első esetben egy értékadást (x megkapja y értékét), a másodikban pedig egy logikai kifejezést láthatunk.

Amennyiben többágú szelekciót kell megvalósítanunk, használhatunk egymásba ágyazott if szerkezetet is, de létezik a többágú szelekció azaz a switch() utasítás. Én magam úgy gondolom hogy két if egymásba ágyazva még olvasható, ha ennél több kell akkor már a switch()-et használom.

switch(<String vagy egész kifejezés>) {
   case <konstans_1>: 
        <utasítás>;
        break; //hogy kilépjen és ne hajtsa végre a többi ágat 
   case <konstans_2>: <utasítás>
        <utasítás>;
        break;
   ... 
   case <konstans_n>: <utasítás>
        <utasítás>;
        break;
   default
        <utasítás>;
}

A Java 7 verziótól kezdve van lehetőség a switch() utasításban String kifejezés kiértékelésére. A korábbi verziókban az úgynevezett sorszámozható típusok (char, byte, int, short, long) volt megengedett.
A kiértékelést követően az a case ág hajtódik végre, ahol a kiértékelt kifejezés megegyezik a case-ben megadott konstanssal. Ha nincs egyezés akkor a default utáni utasítás hajtódik végre. Amennyiben az egyik case ágba betalál a vezérlés, akkor onnantól kezdve végigcsinálja, minden utána lévő ág utasításait. Ezért amennyiben ezt nem akarjuk, úgy a break utasítással tudunk "kiugrani" a switch()-t záró blokk utáni pontra.

Nincsenek megjegyzések:

Megjegyzés küldése