Найти в Дзене

Логические типы Lazarus

Я написал Lazarus, имея ввиду, конечно, Free Pascal. Так что дотошных комментаторов прошу не критиковать - “художник так видит” )))

В Delphi, Free Pascal (а, следовательно, и в Lazarus), и прочих производных от классического Паскаля есть логический тип boolean. Переменные этого типа могут принимать только одно из двух значений - TRUE (ИСТИНА) или FALSE (ЛОЖЬ). Ну и поскольку Паскаль - это не чувствительный к регистру язык, то эти слова можно писать в любом регистре, хоть маленькими, хоть большими буквами, а также комбинациями из маленьких и больших букв. То есть как бы вы не написали: TRUE, true, True, компилятор будет считать это одним значением (ИСТИНА).

Однако современные реализации Паскаля ушли от его классической реализации также далеко, и любые другие развивающиеся языки от своих предков (а Паскаль развивается, кто-бы что по этому поводу ни говорил). Поэтому в Free Pascal (Lazarus) имеются и другие логические типы:

Эта таблица из официальной документации. Однако, если вы преобразуете, например, логическое значение в строковое с помощь функции BoolToStr, то в случае, если эта переменная равна TRUE, функция вернёт значение -1. Почему так работает эта функция (и некоторые другие), я не знаю. Но документация верна (в примере исходного кода ниже это можно увидеть).

Зачем столько логических типов? Фиг знает. Могу только предполагать. Лично я ещё не сталкивался с ситуациями, когда бы мне понадобился какой-то логический тип, кроме boolean. Но среди разработчиков Free Pascal тоже есть художники, и они тоже так видят )))

Хотя если серьёзно, то есть и логическое объяснение. Например, типы Boolean32 и Boolean64 - это фактически целочисленные типы, которые введены для совместимости с С. Хотя как целочисленные типы в Free Pascal (Lazarus) они не работают. То есть вы не можете присвоить целочисленной переменной значение переменной типа Boolean32 или Boolean64. Точнее, сможете, но только с помощью преобразований.

Типы ByteBool, WordBool, LongBool и QWordBool предназначены для ещё большего упрощения взаимодействия с С, поскольку в случае применения этих типов значение FALSE соответствует 0, а TRUE - любому ненулевому значению (обычно это -1). Ну и ещё исходный код для наглядности:

-2

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.