Компонентный Паскаль/Введение в условия: различия между версиями

Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 11:
 
Ниже представлен простейший пример условия:
<sourcesyntaxhighlight lang="oberon2">
IF p1=p2 THEN p1:=p1+1 END;
</syntaxhighlight>
</source>
В этом примере проверяется равенство значений двух переменных, и если они равны, первая переменная увеличивает своё значение на 1. В конце указано ключевое слово END -- оно обязательно для ограничения условия. После сравнения впервые использовано ключевое слово THEN ("тогда"), что если переписать на русском языке будет выглядеть примерно так:
<sourcesyntaxhighlight lang="oberon2">
ЕСЛИ p1=p2 ТОГДА p1:=p1+1 КОНЕЦ;
</syntaxhighlight>
</source>
Не правда ли, очень похоже на обыкновенную человеческую речь? Обратите внимание, что когда используется сравнение, то стоит простой знак "равно", что является математически верной записью. Если обратиться к содержанию предыдущих глав, то там есть упоминание, что в языке Си при использовании знака "равно" в условиях часто бывают ошибки? Это как раз именно потому, что присваивание и сравнение в Си -- слабо различимо. В этом отношении, python поступает более мудро: в условиях используется знак "==", что не является математически правильной записью, но похоже на две половинки моста, которые пытаются свести вместе. Этот подход пригоден при начальному обучении программированию в школе, но не с точки зрения учёного.
 
Эту же конструкцию можно записать и в другом виде, но точно также правильном, с точки зрения компилятора КП:
 
<sourcesyntaxhighlight lang="oberon2">
IF p1 = p2 THEN
p1 := p1 + 1
END;
</syntaxhighlight>
</source>
В отличии от текста модулей и процедур здесь не нужно писать ключевое слово BEGIN. Его роль, если хотите, выполняет ключевое слово THEN (оно завершает список условий). Точно также не нужно после последней инструкции в блоке ставить точку с запятой, так как далее следует "END;"
 
Строка 33:
==Ключевое слово ELSE==
ELSE означает на английском "ИНАЧЕ". Это ключевое слово часто бывает нужно, если у условия есть альтернативное действие. Ниже приведён фрагмент, в котором реализовано условие с альтернативой только через IF и через ELSE:
<sourcesyntaxhighlight lang="oberon2">
IF p1 = p2 THEN
p1 := p1 + 1
Строка 46:
p1 := p1 - 1
END;
</syntaxhighlight>
</source>
В первом фрагменте при использовании только IF пришлось записать два условия:
* когда р1 равно р2
Строка 58:
==Ключевое слово ELSIF==
Это ключевое слово частенько бывает необходимо, когда по условию, нужно выяснить, что например, переменная попадает в какой-то числовой или литеральный диапазон или равно чему-то конкретно более двух раз (при двух разах хватило бы одного ELSE). Причём именно такая форма записи довольно эффективно обрабатывается компьютером, и если выполнена хотя бы одна ветка таких условий -- остальные игнорируются. Пример такой конструкции дан ниже:
<sourcesyntaxhighlight lang="oberon2">
IF p1 = p2 THEN
p1 := p1 + 1
Строка 70:
p1 := p1 - 10
END;
</syntaxhighlight>
</source>
После последней ветки есть ''необязательная'' конструкция ELSE. Она будет выполнена только тогда, когда не выполнена ни одна из предыдущих веток. Также здесь впервые применён знак "больше" -- ">". Также в условиях можно использовать знак "меньше" -- "<". Знак сравнения всегда относится к той переменной, которая стоит слева от знака сравнения, т. е.:
* "р1 равно р2" -- "p1 = p2";
Строка 78:
==Составные условия==
Условие является составным, если в сравнении участвует более двух переменных, пример такого условия:
<sourcesyntaxhighlight lang="oberon2">
IF (p1 > p2) & (p1 > 10) THEN
p1 := p1 + 1
Строка 86:
p1 := p1 - 10
END;
</syntaxhighlight>
</source>
В первом условии использовано "ЛОГИЧЕСКОЕ И" -- "&" ("амперсанд"). Оно соответствует логическому умножению. В сумме первое условие читается так: если переменная р1 больше переменной р2 И переменная р1 больше 10 ТО.... и далее действия, которые определены в этой ветке. Во второй ветке условие читается так: если р1 больше р2 И р2 меньше нуля ТО... и далее действия, которые определены именно для этой ветки.
 
Строка 97:
==Простые условия==
Простые условия, это такие условия, в которых упоминается только одна булева переменная. И это правильно, если вспомнить, что условие начинает выполняться тогда, когда оно истинно. Поэтому ничто не мешает записывать условия в такой форме:
<sourcesyntaxhighlight lang="oberon2">
VAR
b1, b2: BOOLEAN;
Строка 111:
p1 := p1 - 10
END;
</syntaxhighlight>
</source>
Здесь происходит предварительное вычисление выражений для булевых переменных b1 и b2. И в зависимости от полученных результатов (TRUE или FALSE) -- дальше будет выполняться (или не выполняться) ветка условия. Такой приём может быть удобен, если результаты таких логических вычислений будут использоваться более одного раза -- это ускорит выполнение программы, и главное -- упростит её понимание.