Feltételes elágazások

BecomeAnXcoder – Feltételes elágazások

if()

Van amikor csak akkor szeretnéd, hogy utasítások egy sorozata végrehajtódjon, ha bizonyos feltételek teljesülnek. Speciális utasítások segítségével ezt elérhetjük [1.2].

//[1] 
// az age egy egész típusú változó, a felhasználó életkorát tartalmazza
 if (age > 30)    // [1.2] A > szimbólum azt jelenti, hogy "nagyobb, mint" 
{
     NSLog(@"age öregebb, mint harminc.");  //[1.4] 
}
 NSLog(@"Vége.");   //[1.6]

Az [1.2] sor tartalmazza az if() utasítást, amit feltételes utasításnak szoktak nevezni. A zárójelek tartalmazzák azt a kódot, aminek a segítségével el kell dönteni, hogy zárójelek közötti logikai kifejezés értéke igaz-e. Jelen példában, ha az age > 30 feltétel teljesül, akkor az [1.4] string ki lesz nyomtatva. A feltétel akár teljesül, akár nem, az [1.6] string mindenképpen ki lesz nyomtatva, mivel ez nincs az if() utasítás zárójelei között.

if() else()

Az if…else utasítás segítségével egy alternatív utasítás sorozatot is lefuttathatunk, amikor a feltétel nem teljesül [2].

//[2] az age egy egész típusú változó, a felhasználó életkorát tartalmazza
 if (age > 30) //[2.2] 
{
     NSLog(@"age öregebb, mint harminc.");  //[2.4] 
}
 else 
{
     NSLog(@"age nem öregebb, mint harminc.");   //[2.7] 
}
 NSLog(@"Vége.");

A [2.7] sorban levő string csak akkor lesz kinyomtatva, ha a feltétel nem teljesül [2].

Összehasonlítás

A nagyobb jel mellett [2.2] a következő összehasonlító operátorok állnak még a rendelkezésedre.

==   egyenlő 
>    nagyobb 
<    kisebb >
=   nagyobb egyenlő 
!=    nem egyenlő

Külön szeretném felhívni a figyelmet az egyenlő operátorra. Ez két darab egyenlőség jelet tartalmaz! Ezt bizony könnyen el lehet téveszteni, és helyette csak egy egyenlőség jelet írni. Az viszont az értékadás operátora, tehát összehasonlítás helyett az adott értéket adja a változónak. Ez egy tipikus hibalehetőség kezdő programozóknál, érdemes rá odafigyelni. Mondd ki jó hagosan: Nem fogom elfelejteni, hogy dupla egyenlőség jelet írjak, amikor az egyenlőséget akarom tesztelni!

Az összehasonlító operátorok meglehetősen hasznosak amikor meghatározott utasítás sorozatot többször is szeretnénk egymás után végrehajtani. Ez lesz a következő fejezet témája. De előtte vizsgáljuk meg a feltételes utasítást néhány más aspektusból.

Gyakorlat

Vizsgáljuk meg közelebbről az összehasonlítást. Az összehasonlítás eredménye valamelyik a két lehetséges eset közül: az eredmény vagy igaz, vagy hamis.

Az Objective-C nyelvben az igaz és a hamis értéknek rendre az 1 illetve a 0 érték felel meg. Van egy speciális adattípus: BOOL, amelyik segítségével ábrázolni tudod ezeket az értékeket. Az igaz értéket az 1, vagy a YES is kifejezheti, a hamisat pedig a 0, vagy a NO.

//[3]
 int x = 3;
 BOOL y;
 y = (x == 4);  // y értéke 0 lesz.

Egyszerre több feltételt is vizsgálhatunk. Ha egyszerre két feltételnek kell teljesülnie, akkor használd a logikai AND-et, amit két és jellel is jelölhetünk: &&. Ha egyszerre csak az egyik feltételnek kell teljesülnie, akkor használd a logikai OR-t, amit két függőleges vonallal is jelölhetünk: ||.

//[4]
 if ( (age >= 18) && (age < 65) ) 
{    
     NSLog(@"Valószínűleg dolgoznia kell a megélhetésért."); 
}

A feltételes utasításokat egymásba is ágyazhatjuk. Egyszerűen az egyik feltételes utasítást a másik feltételes utasítás kapcsos zárójelei közé helyezzük. Először a külső feltételes utasítás lesz végrehajtva, és ha a feltétel teljesül, akkor a következő utasítás a belsejében, és így tovább …:

//[5]
 if (age >= 18) 
{
     if (age < 65)     
     {
         NSLog(@"Valószínűleg dolgoznia kell a megélhetésért.");     
      }
 }

eredeti oldal