Pascal/Булеві змінні

Матеріал з Вікіпідручника
Перейти до: навігація, пошук

Подивіться на вираз між if та then. Це зазвичай якесь порівняння, наприклад 2+2=4 або x<10. Зрозуміло, що таке порівняння може бути істинним (як перше) чи хибним (як друге, якщо, наприклад, x=100). Значення, яке може бути істинним або хибним, в Паскалі має тип boolean (українською - булевий тип, від прізвища англійського математика Джорджа Буля). Для позначення завжди істинного значення використовується булева константа true(англ. "істина"), завжди хибного - false(англ. "брехня"); так, вираз

if 2+2=4 then ...

повністю еквівалентний

if true then ...

Звернімо увагу, що оператори порівняння =(дорівнює), >(більше), <(менше), <>(не дорівнює), >=(більше або дорівнює), <=(менше або дорівнює) в певному сенсі працюють так само, як і, скажімо, математичний оператор / - певним чином оброблюють свої операнди і видає результат певного типу: boolean для порівнянь, real для ділення.

Так само, як і числа, булеві значення можуть зберігатися в змінних булевого типу.

var b:boolean;
begin
  b:=2+2=5;
  if b then ...

Булівські змінні використовуються для зберігання інформації про певний логічний факт, як прапорець, щоб не писати одну й ту саму умову кілька разів. Поширеною помилкою серед новачків є порівнювати булеві змінні з константами, наприклад,

if b=true then ...;
if c=false then ...;

Формально це не помилка, такий код нормально працює. Але значно простіше записати те саме як

if b then ...;
if not c then ...;

Такий код читається значно легше, особливо якщо імена змінних змістовні, на кшталт A_Positive, File_open чи isConnected.

Для об'єднання кількох логічних тверджень в одне використовуються логічні операції. При використанні цих операцій бажано завжди використовувати дужки, бо:

  • помилка в порядку виконання логічних операцій може призвести до неочікуваної поведінки, яку важко відстежити;
  • операції порівняння мають нижчий пріорітет і будуть виконані після логічних. Таким чином, вираз a=0 or b>3 буде розглядатися як a=(0 or b)>3, що призведе до помилки компіляції.

Завдання[ред.]