Ранее, вместе со встроенными типами в Канторе были зарезервированы ключевые слова false и true, упрощавшие, как казалось, вывод типов при объявлении функций. Отказ от встроенных типов заставляет принять решение — либо признать булевский тип исключительным и оставить ключевые слова, либо изъять ключевые слова в пользу констант. Не усложнит ли это объявление булевых функций?
Константы и пространства имен
Основная сложность перехода на булевы константы — размещение классаBoolean
в пространстве :Core
. Это логично, поскольку булевый тип — один из базовых. Но из других пространств ссылки на константы будут иметь комплексный вид — :Core:Boolean.False
и :Core:Boolean.True
. На первый взгляд смотрится неудобно, но даже самый простой пример вносит ясность::Core:Boolean a = False;Локальная функция
a
имеет тип :Core:Boolean
, что заставляет компилятор искать объявление False
в пространстве класса :Core:Boolean
, объявление которого выглядит так: public final class :Core:Boolean = [False, True];Данное объявление подразумевает, что свойство
False
объявлено как статическое (концепция перечислений пока в разработке), поэтому объявление функции a
валидно, и она успешно скомпилируется.Поиск имени в пространстве класса — базовое соглашение видимости имен в Канторе, сильно упрощающее использование перечислимых типов, в том числе
Boolean
:Альтернативные способы
Если базовый способ объявления булевых значений по каким-то причинам не подходит, есть как минимум два альтернативных способа — при помощи выражения или же обращением к свойствуAsBoolean
: a = 0 == 1; // выражением, как в SQL b = 0.AsBoolean; // через свойствоСравнение констант, дающее предопределенный результат, долгое время было распространено в СУБД, поскольку не влияло на выдачу, но задействовало оптимизатор.
Свойство
AsBoolean
должно быть реализовано классом, как уже сделано в классе :Core:Word
— тип выведен из значения 0.Практика использования булевых констант
Так ли часто придется явно использовать булевы константы на практике? Видятся следующие случаи:- Если при объявлении параметра или свойства задать тип, константа становится видна по короткому имени.
- Параметры и свойства, имеющие значения по умолчанию, чаще всего опускаются при обращении, если значение по умолчанию подобрано верно.
- Если булевы свойства и параметры не имеют значений по умолчанию, либо умолчания нужно перекрыть, в точке обращения тип свойства или параметра уже известен компилятору, и к соответствующей константе можно обращаться по короткому имени. Тут действует то же соглашение, что и в первом рассмотренном примере.