Вложенные конструкции if-else

Следует быть внимательными при использовании вложенных операторов if. Предпочтительнее пользоваться схемой else-if (т.е. вкладывать во внешнюю ветку else), а не then-if (т.е не вкладывать во внешнюю ветку if). Так как в последнем случае придется следить за тем, к какой ветке относится соответствующее else. Пренебрежение этим правилом приводит к нагромождению закрывающих else.

Сравните две программы ниже. Они делают одно и то же. Однако предпочтительной является первая.

else-if

var
    a: integer;
 
begin
    write('Введите целое число: ');
    readln(a);
 
    if a = 0 then
        writeln('zero')
    else
        if a = 1 then
            writeln('one')
        else
            if a = 2 then
                writeln('two')
            else
                writeln('unknown');
 
readln
end.

then-if

var
    a: integer;
begin
    write('Введите целое число: ');
    readln(a);
 
    if a <> 0 then
        if a <> 1 then
            if a <> 2 then
                writeln('unknown')
            else
                writeln('two')
        else
            writeln('one')
    else
        writeln('zero');
 
readln
end.

При использовании второго варианта надо помнить следующее общее правило: каждый else относится к ближайшему предшествующему if, еще не имеющему парного else.

При вложении в ветвь else (первый вариант) конструкция получается логически более понятной.