Шаг 68.
Условный оператор if

    На этом шаге мы рассмотрим правила использования оператора if.

    Условный оператор if может быть записан в полной и неполной формах, которые имеют следующий вид.

    Неполная форма:

    if <Выражение> then <Оператор>;

    Полная форма:

    if <Выражение> then  <Оператор1> else  <Оператор2>;

    При выполнении условного оператора сначала вычисляется Выражение, результат которого может принимать только булевский тип, а затем, в зависимости от значения результата (True, False), выполняется Оператор1, стоящий после ключевого слова then (если результат равен True), или Оператор2, стоящий после ключевого слова else (если результат равен False).

    В случае, когда оператор if записан в неполной форме, при значении результата False управление передается оператору, следующему непосредственно после оператора if, а Оператор1, стоящий за ключевым словом then, пропускается.

    Начинающим программистам следует обратить внимание на рассматриваемые ниже синтаксические особенности оператора if.

    Напомним, что в Object Pascal операторы разделяются символом ; (точка с запятой). Это означает, что внутри любого структурного оператора символ ";" встречаться не должен, иначе все, что стоит после него, будет считаться другим оператором.

    Пример с ошибкой:

    if  А >В  then С : = А; <--- Ошибка!
    else С : = В;

    В показанном выше примере точка с запятой, стоящая перед ключевым словом else заканчивает текст оператора if. А это приводит к синтаксической ошибке, поскольку оператора, начинающегося с ключевого слова else в Object Pascal нет.

    Чтобы не допускать таких ошибок целесообразно запомнить следующее правило:

    Перед ключевым словом else символ ";" никогда не ставится.

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

    begin
       .   .   .   .
    end
который позволяет интерпретировать группу операторов как один оператор.

    Заметим, что операторы, расположенные между ключевыми словами begin ... end, также как и везде, должны разделяться точкой с запятой.

    Обобщенные формы простейшего случая оператора if приведены в таблице 1:

Таблица 1. Обобщенная форма оператора if
Количество операторов в ветви Обобщенная форма оператора if
then else
один один
  if <Выражение> then <Оператор1> else <Оператор2>;
несколько один
  if <Выражение> then 
  begin
    <Оператор1>;
    <Оператор2>;
       .   .   .   .  
    <ОператорN>;
  end 
  else <ОператорM>;
один несколько
  if <Выражение> then <Оператор> 
 else 
  begin 
    <Оператор1>;
    <Оператор2>;
       .   .   .   .  
    <ОператорN>;
  end;
несколько несколько
  if <Выражение> then 
  begin
    <Оператор1>;
    <Оператор2>;
       .   .   .   .  
    <ОператорN>;
  end 
  else
  begin 
    <ОператорN+1>;
    <ОператорN+2>;
       .   .   .   .  
    <ОператорN+M>;
  end;

    Еще одна синтаксическая сложность корректного использования оператора if возникает при написании вложенных операторов if. В случае, если вложенный оператор if располагается в пределах составного oпeратора, больших проблем не возникает, так как ключевые слова begin и end точно ограничивают область каждой альтернативы.

    Например:

  if <Выражение> then 
  begin
    <Оператор1>; 
    if <Выражение1> then <Оператор2> else <Оператор3>; 
    <Оператор4> 
  end 
  else 
  begin
    <Оператор5>; 
    if <Выражение2> then <Оператор6> 
  end;

    Однако, если вложенный оператор if является единственным оператором в ветви альтернативы, то может возникнуть неоднозначность: какому if соответствует ветвь else.

    Например:

    if <Выражение> then
      if <Выражение1> then
      <Оператор>	
    else <Оператор1>;

    В таких случаях следует помнить правило:

 Ключевое слово else связывается с ближайшим стоящим перед ним ключевым словом if, 
 которое еще не было связано с каким-либо ключевым словом else.

    Если в предыдущем примере более четко обозначить структуру вложенности, записав else на одном уровне с then, которому оно соответствует, то получим такой фрагмент:

    if <Выражение> then
      if <Выражение1> then
        <Оператор>	
      else <Оператор1>;

    На следующем шаге мы рассмотрим оператор case.




Предыдущий шаг Содержание Следующий шаг