Elágazás

A Programozás Wiki wikiből

Egy programozási nyelvben akkor beszélünk elágazásról, mikor a vezérlés valamilyen feltételtől függően más-más ágon folytatódik. Ez a vezérlési szerkezet jól használható egy függvény paramétereinek kategorizálására, a programbemenet feldolgozásának részekre bontására, programfutás közbeni események vizsgálatára, és még számtalan más esetben.

Típusok[szerkesztés]

A legegyszerűbb elágazási forma, ha egy programrésznek csak egy feltétel teljesülése esetén kell végrehajtódnia:

if i = 1 then  { feltétel }
   i := 2;     { feltételes ág }

Előfordul, hogy más lépésre van szükség, ha a feltétel hamis:

if j = 3             { feltétel }
   then j := 0       { igaz ág }
   else j := j +1    { hamis ág }

Elágazásnak hívjuk azt a szerkezetet is, amikor nem logikai érték, hanem valamilyen diszkrét típusú érték szerint különböztetjük meg az ágakat:

case Ch of           { az ág Ch értékétől függ }
   'a'..'z' : K := ckLower;  { első ág }
   'A'..'Z' : K := ckUpper;  { második ág }
   '0'..'9' : K := ckDigit;  { harmadik ág }
   else K := ckSpecial;  { többi eset ága }
end;

Az elágazást a rövidzáras kifejezés-kiértékelő nyelveknél a logikai műveletek használatával is leírhatjuk. Például php-ben:

$time > 5000 || print( "az idő túl kevés\n" );

// ekvivalens a következővel
if ( ! ($time > 5000) )
   print( "az idő túl kevés\n" );

A fenti másképpen, pozitív értelemben, azaz nem negálva kifejezve:

$time < 5000 && print( "az idő túl kevés\n" );

// ekvivalens a következővel
if ( ($time < 5000) )
   print( "az idő túl kevés\n" );

Gépi kód[szerkesztés]

Az assembly nyelveknél és egyes virtuális gépek esetén a blokkok hiánya miatt a teljes elágazás jelzésére nincs nyelvi eszköz. Az elágazás ilyen nyelveknél feltételes ugrás utasításokkal írható le:

A következő C kód

   if ( 2 == b ) 
      b = 0;
      else ++b;

x86 assembly-re fordítva a következő lehet:

        cmp     dword ptr [%ebp-8], 2
        jne     .L2
        mov     dword ptr [%ebp-8], 0
        jmp     .L4 
.L2:
        inc     dword ptr [%ebp-8]
.L4:

Megjegyzések[szerkesztés]

A kivételek kezelése bizonyos szempontból felfogható egyfajta elágazásként.