Логический тип

Логи́ческий тип да́нных, или булев тип, или булевый тип (отангл.Booleanилиlogical data type) — примитивныйтип данныхвинформатике, принимающий два возможных значения, иногда называемыхистиной(true)иложью(false). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип данных. В некоторых языках программирования за значениеистинаполагается 1, за значениеложь— 0.
Название типа Boolean получило в честь английского математика и логикаДжорджа Буля, среди прочего занимавшегося вопросами математической логики в серединеXIX века.
Булев тип данных может быть реализован и храниться в памяти с использованием только одногобита, но обычно используется минимальная адресуемая ячейка памяти (обычнобайтилимашинное слово), как более эффективная с точки зрения быстродействия единица хранения при работе срегистрами процессораиоперативной памятью.
К этому типу данных применимы следующие операции, в скобках указаны символические обозначения операций в некоторых популярных языках программирования:
Также могут использоваться и другие операциибулевой алгебры, например,стрелка Пирсаилиштрих Шеффера. Большинство языков программирования позволяют использовать булев тип переменных и констант и в арифметических операциях, предварительно приводя его к численному типу, согласно принятым в языке правилам преобразования типов.
Традиционным применением булева типа данных являются значения «да»/«нет» в отношении результата сравнение чисел в более сложных операциях.
Все операции сравнения двух величин — вещественных и целых переменных или константы с переменной (равно, больше, меньше), функции проверки принадлежности вхождения некоторого элемента в множество и проверка на непустоту пересечения множеств возвращают в качестве результата булев тип.
Язык программирования AdaопределяетBooleanв пакете Standard как нумерованный тип со значениямиFalseиTrueв которомFalse<True.
Родственные операторы (=,/=,<,<=,>,>=) применяются ко всем нумерованым типам, включаяBoolean. Булевы операторыand,or,xorиnotприменимы к типуBooleanи любым объявленным подтипам. Булевы операторы также применимы к массивам, содержащим значенияBoolean.
Algol 60имеет тип данныхbooleanи соответствующие операторы, установленные в спецификации Algol 60. Тип данных был сокращён доboolвALGOL 68.
Вязыке программирования C, который не предоставлял булевых значений вC89(но вводит вC99) вместо значений true/false было установлено сравнение значения с нулём. Для примера, код:
равнозначен коду:
Это было честно дляцелочисленноготипа данных (integer); тем не менее, бинарные значениячисел с плавающей запятой(floating-point) были приближёнными к выводимым на экран десятичным значениям, и это давало ошибки при сравнении. Традиционно, целое содержало одну (или более) булеву переменную (одну на каждыйразрядцелого).
В языкеHaskellбулев тип данных реализован как простейшийалгебраический тип данных:
В стандартном модулеData.Boolдля него определены функции&&,||иnot.
В языкеPythonбулев тип данных обозначается какbool, для приведения других типов данных к булеву существует функцияbool(), работающая по следующим соглашениям:
Для других объектов результат рассчитывается через метод__nonzero__, который в идеале должен возвращать значенияTrueилиFalse.
Булев тип приводится к следующим типам данных:
К другим типам данных булев тип не приводится.
ВPython2.6 есть интересная особенность — можно переопределить значениеTrueнаFalseи наоборот, написав всего лишь:
или, вариант для всей области видимости
что может привести к весьма неожиданному поведению интерпретатора или IDLE. В Python 3 данная возможность была ликвидирована —TrueиFalseсчитаются зарезервированными, как и словоNone.
Описание переменных:
Арифметические операции над булевыми недопустимы, но допустимы логические операции: Not, And, Or, Xor, операции отношения = (равно), <> (не равно) и функции Ord, Pred, Succ.
ВRubyбулев тип представлен двумя предопределеннымипеременными:trueиfalse. Появляется логический тип в результате логических операций или вызова логическихметодов. По традиции, имя логических методов (то есть методов, которые возвращают значение true или false) заканчивается на «?».
В качествеfalseможет выступатьnil, а в качествеtrue— любойобъект, в том числепеременнаясо значением «0» или пустаястрока, что часто является неожиданностью для новичков.