Раздел 6.2 - Тип Boolean

В Ada также предопределен простой тип Boolean. Переменные этого типа могут принимать только два значения: True и False. Результатом всех операций сравнения (=, >=, /=, и т.д.) являются величины типа Boolean. Все условные выражения (которые записываются после if или while) должны иметь тип Boolean.

Существует несколько специальных инфиксных операций: "and" (и), "or" (или), и "xor" (исключающее или), используемых в их обычном смысле. Они принимают в качестве параметров две величины типа Boolean и возвращают значение того же типа. Результатом выражения `True and False' будет False, тогда как результатом выражения `True or False' будет True. 'Исключающее или' дает True, если любой из двух операндов является истинным, но не оба одновременно.

Существует также префиксная операция ``not''. Если булевская переменная А имеет значение True, то `not A' примет значение False.

Если у вас возник вопрос о том, какой результат будет иметь любая комбинация операндов, то ниже приведена полная таблица истинности:

--- Если ---+-------------------  То  -----------------
A     B     | (A and B)   (A or B)   (A xor B)  (not A)
True  True  |   True        True       False     False
True  False |   False       True       True      False
False True  |   False       True       True      True
False False |   False       False      False     True

Обычно в Ada данные выражения будут преобразованы в порядке, наиболее эффективном для данного компьютера. Если необходимо преобразовывать их в определенном порядке и прекратить преобразования, когда ответ уже известен, существует такой вид операций `and' и `or', как сокращенные логические операции. Они могут быть выполнены только слева направо, и никак иначе. Операции && и || языка С работают точно также. Операция `and' сокращенного типа - это операция `and then', а операция `or' сокращенного типа - `or else'. Например, когда необходимо выполнить что-то, если К не ноль и 1.0/K больше, чем В, то очевидно, что сначала необходимо проверить первое условие, и лишь затем - второе:

 if K /= 0 and then 1.0/Float(K) > B then ...

Упражнение:

Какое из следующих выражений принимает значение True?

  1. (True and False)
  2. not (True or False)
  3. True and then True

Вы можете также:

PREVIOUS Перейти к предыдущему разделу

NEXT     Перейти к следующему разделу

OUTLINE  Вернуться к содержанию Урока 6

David A. Wheeler (dwheeler@ida.org)

Перевод: Юрий Королев   Общая редакция перевода: Г.Ю. Сисюк

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s6s2.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org