Я написал 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). Ну и ещё исходный код для наглядности:
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.