Jelenlegi hely

6.3. Az if-else szerkezet

Az if utasítás lehetővé teszi a programunk számára, hogy valamilyen kritérium szerint kiválasztva futtasson más utasításokat. Például tegyük fel azt, hogy a programunk hibakereső (debugging) információkat ír ki egy DEBUG nevű, boolean típusú változó értéke alapján. Ha a DEBUG igaz, a program kiírja az információt, az x változó értékét. Különben a program futása normálisan folytatódik. Egy ilyen feladatot implementáló programrész a következőképpen nézhet ki:

if (DEBUG) {
    System.out.println("DEBUG: x = " + x);
}

Ez az if utasítás legegyszerűbb formája. Az if által vezérelt blokk végrehajtódik, ha a feltétel igaz. Általában az if egyszerű alakja így néz ki:

if (feltétel) {
    kifejezések
}

Mi van akkor, ha az utasítások más változatát akarjuk futtatni, ha a feltétel kifejezés hamis? Erre az else utasítást használhatjuk. Vegyünk egy másik példát. Tegyük fel azt, hogy a programunknak különböző műveleteket kell végrehajtania attól függően, hogy a felhasználó az OK gombot vagy más gombot nyom meg a figyelmeztető ablakban. A programunk képes lehet erre, ha egy if utasítást egy else utasítással együtt használunk.

if (response == OK) {
    //code to perform OK action
} else {
    //code to perform Cancel action
}

Az else blokk akkor kerül végrehajtásra, ha az if feltétele hamis. Az else utasítás egy másik formája az else if egy másik feltételen alapulva futtat egy utasítást. Egy if utasításnak lehet akárhány else if ága, de else csak egy. Az alábbi IfElseDemo program egy teszt pontszámot alapul véve egy osztályzatot határoz meg: 5-ös 90%-ért vagy afölött, 4-es 80%-ért vagy afölött és így tovább:

public class IfElseDemo {
    public static void main(String[] args) {
        int testscore = 76;
        int grade;
        if (testscore >= 90) {
            grade = 5;
        } else if (testscore >= 80) {
            grade = 4;
        } else if (testscore >= 70) {
            grade = 3;
        } else if (testscore >= 60) {
            grade = 2;
        } else {
            grade = 1;
        }
        System.out.println("Grade = " + grade);
    }
}

Ennek a programnak a kimenete:

Grade = 3

Megfigyelhetjük, hogy a testscore értéke több kifejezés feltételének is eleget tehet az alábbi if utasítások közül: 76 >= 70 és 76 >= 60. Azonban, ahogy a végrehajtó rendszer feldolgoz egy olyan összetett if utasítást, mint ez, amint egy feltétel kielégül, lefutnak a megfelelő utasítások (grade = 3), és a vezérlés kikerül az if utasításból anélkül, hogy a további feltételeket kiértékelné.

A Java programozási nyelv támogat egy háromoperandusú operátort, ami egyszerű esetekben az if utasítás helyett alkalmazható. Az operátor általános alakja:

logikai kifejezés ? kifejezés-ha-igaz : utasítás-ha-hamis

Idézzük fel ezt az utasítást a MaxVariablesDemo programból:

if (Character.isUpperCase(aChar)) {
    System.out.println("The character " + aChar
                       + " is upper case.");
} else {
    System.out.println("The character " + aChar
                       + " is lower case.");
}

Itt látható, hogyan használhatjuk ezt az operátort:

System.out.println("The character " + aChar + " is " +
    (Character.isUpperCase(aChar) ? "upper" : "lower")
     + "case.");

A ?: operátor kiértékelésének eredménye az upper karaktersorozat lesz, ha az isUpperCase metódus igaz értéket ad vissza, egyébként pedig a lower karaktersorozat. Az eredmény össze lesz fűzve a megjeleníteni kívánt üzenet más részeivel. Ha megszokjuk ezt a szerkezetet, bizonyos esetekben könnyebben olvashatóbbá és tömörebbé teheti a kódunkat.

Megjegyzés: Érdemes megfigyelni, hogy miért is lehetett itt az if-else szerkezetet kiváltani a háromoperandusú operátorral: az if és else ágon is ugyanazt akartuk tenni egy bizonyos kifejezéssel: ki akartuk írni. Ha ez a közös felhasználás nem áll fenn, akkor maradnunk kell az if-else utasításnál.

Megjegyzés: Általában nem feltétlenül szükséges, mégis sok alkalommal zárójelezzük az egyes operandusokat, és időmként az egész operátor-kifejezést is. (Az előző példa az egész kifejezést zárójeleni.)