Instrucțiunea if

Instrucțiunea if servește pentru realizarea structurii alternative din programarea structurată. Sub forma ei cea mai simplă, această instrucțiune se scrie astfel:
    if(expresie_booleană) instrucțiune
unde instrucțiunepoate fi orice instrucțiune valabilă în limbajul Java: instrucțiune simplă sau structurată, inclusiv un bloc sau un alt if. Remarcăm că în forma generală de mai sus nu am pus la sfârșit caracterul ';' (punct și virgulă). Dacă instrucțiune este o instrucțiune simplă, ea include și acest simbol.

Semnificația instrucțiunii if este următoarea: dacă valoarea expresiei booleene din paranteză este true, atunci se execută instrucțiune, iar altfel nu se execută nimic, continuându-se programul.
 
Exemple

1. Fie instrucțiunea
     if(alpha<beta) x=2*alpha+beta;
În acest caz, instrucțiune este instrucțiunea-expresie
     x=2*alpha+beta;
care se termină ea însăși prin punct și virgulă. Înstrucțiunea if se interpretează astfel: dacă expresia booleană alpha<beta are valoarea true, atuncivariabileix i se atribuie valoarea expresiei aritmetice 2*alpha+beta. Altfel (dacă expresia booleana are valoarea false) variabila x rămâne la valoarea pe care a avut-o anterior.

2. Fie instrucțiunea
     if(alpha<beta) {
       int gamma=alpha-3*beta;
       x=2*gamma;
       y=gamma-3;
     }
În acest caz, instrucțiune este un bloc, care se execută numai dacă expresia booleană alpha<betaare valoarea true. Remarcăm ca după acolada prin care se închide blocul nu s-a mai pus punct și virgulă.

3. Fie instrucțiunea
     if(alpha<beta)
       if(beta>0) System.out.println(alpha+" "+beta);
În acest caz, instrucțiune este un alt if.


 
Deși cuvântul then nu apare explicit, în specificația limbajului Java această forma a lui if este cunoscută sub denumirea "instrucțiunea if-then" (if-then statement), care se traduce prin dacă .. atunci.
Remarcăm că această instrucțiune realizează un caz particular al structurii alternative, unde pe ramura altfel nu se efectuează nici o acțiune.

Instrucțiunea if .. else

Instrucțiunea if .. else realizează ambele ramuri ale structurii alternative și are forma
    if(expresie_booleană)
        instrucțiune_1
    else
        instrucțiune_2

în care instrucțiune_1 și instrucțiune_2 pot fi instrucțiuni simple sau structurate.

Interpretarea acestui if..else este următoarea: dacă expresie_logică are valoarea true,atunci se execută instrucțiune_1, iar altfel se execută instrucțiune_2.
 
Deși cuvântul then nu apare explicit, în specificația limbajului Java această instrucțiune se numește if-then-else.
Exemple

1. Fie instucțiunea
    if(a<b) x=2*a-b;
    else x=a+b;
În acest caz, atât instrucțiune_1, cât și instrucțiune_2 sunt instrucțiuni-expresii și se termină prin punct și virgulă. 

2. Fie instrucțiunea
    if(a<b) {
      x=2*a-b;
      y=a+1;
    }
    else {
      x=a+b;
      y=b;
    }
În acest caz, instrucțiune_1 și instrucțiune_2 sunt blocuri. Remarcăm că după acolada închisă a blocului nu s-a mai pus punct și virgulă.

Instrucțiuni if .. else imbricate

Atât instrucțiunea if, cât și if..else, pot conține alte instrucțiuni if sau if..else. În acest caz se pune problema cărui if îi aparține un anumit else. O programare neatentă poate conduce la greșeli, în sensul că interpretarea dată de compilatorul Java poate fi diferită de cea avută în vedere de programator. Pentru a nu se produce astfel de confuzii, cel mai bine este să se grupeze instrucțiunile în blocuri.
 
Exemplu

Fie instrucțiunea
    if(a<b)
      if(b<c) System.out.println("A");
      else System.out.println("B");
    else System.out.println("C");
Interpretarea corectă este, în acest caz, că primul else aparține celui de al doilea if, iar ultimul else aparține primului if. Această structură se poate întări scriind instrucțiunea astfel:
    if(a<b) {
      if(b<c) System.out.println("A");
      else System.out.println("B");
    } else System.out.println("C");
Întrucât s-au folosit acoladele pentru a pune instrucțiunea if..else interioară sub formă de bloc, a devenit clar pentru oricine cărui if îi apartine fiecare din cei doi else.



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați