На этом шаге мы рассмотрим правила использования оператора 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:
Количество операторов в ветви | Обобщенная форма оператора 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.