Az if … then … else utasítás szintaxisa
A feltételes, kétirányú elágazás szintaxisa Free Pascalban a következő:
If logikai kifejezés
Then utasítás
Else utasítás
Az Else-ág megadása nem kötelező. Ha a logikai kifejezés értéke True, akkor a Then utáni utasítás hajtódik végre. Ha False, és adtunk meg Else-ágat, akkor az abban leírt utasítást hajtja végre a program, ha nem adtunk meg Else-ágat, akkor ez az elágazás egy üres utasítás lesz. Ha akár a Then- akár az Else-ágban több utasítást is szeretnénk megadni, az utasításokat zárjuk Begin és End közé.
Fontos: az kulcsszó elé kétirányú feltételes elágazásban tilos pontosvesszőt írni, ha írunk, az szintaktikai hiba. Ez azért van így, mert a Pascal nyelvben a pontosvessző nem része az utasításnak, hanem azok elválasztására szolgáló karakter. Ha a fordítóprogram pontosvesszőt talál, akkor az utasítást befejezettnek tekinti és újabbat vár, de Then illetve Else kulcsszóval nem kezdődik egyetlen utasítás sem, ezért a kód értelmezhetetlenné válik.
A szelekciót megvalósító utasítás vagy utasítások az adott programozási nyelven. Free Pascalban kétirányú és többirányú elágazás is létezik.
Egymásba ágyazott elágazások
A kétirányú feltételes elágazások egymásba ágyazhatók, amint az az alábbi példában látható:
If a > b
Then WriteLn('A a nagyobb')
Else If b > a
Then WriteLn('B a nagyobb')
Else Writeln('Egyenlők');
Az az utasítás, amely egy feltétel függvényében két utasítássorozat közül az egyiket hajtja végre. Szintaxisa Free Pascalban:
If feltétel Then utasítás | Else utasítás
A csellengő else
Az egymásba ágyazott kétirányú elágazások használatakor gondot jelenthet, hogy egy Else-ág melyik Then-ághoz tartozik:
If a > b
Then If b > c
Then d := a + c
Else d := a - c;
Vajon ez az Else-ág melyik Then-hez tartozik?
A Free Pascalban ilyen esetben mindig a legutolsó Then-hez tartozik. Azonban az ilyen forráskódot látva a programozó mindig bajban lesz. Az is előfordulhat, hogy éppen az első Then-hez szeretnénk kötni az Else-ágat. Mindkét esetre megoldás, ha a Then- és Else-ágak utasításait Begin és End utasítások közé zárjuk, még akkor is, ha erre egyébként nem lenne szükség.
If a > b
Then Begin If b > c
Then d := a + c
Else d := a - c
End;
Egy másik lehetséges megoldás az első If feltételének negálása és a Then és Else ágak felcserélése. Mivel így a második If az Else ágra kerül, nem okoz problémát. Kis szépséghiba, hogy ekkor az első Then ágban üres utasítás marad.
If a <= b
Then
Else If b > c
Then d := a + c
Else d := a - c;
Az a programozási eset, amikor több, egymásba ágyazott kétirányú elágazásban valamely ághoz ELSE-ágat rendelünk, de a felírásból nem egyértelműen derül ki, hogy az ELSE-ág melyik elágazáshoz tartozik.