2.2 Обнуляемые типы

Определение: Nullable (обнуляемый)
Тип в Haxe считается обнуляемым, если null является допустимым значением для него.

Обычно языки программирования имеют единое и весьма конкретное определение допустимости нулевых значений. Однако, Haxe вынужден искать в этом вопросе компромисс в связи с различной природой языков на которые будет транслироваться программ (будем называть такие языки целевыми). В то время, как некоторые из целевых языков допускают (и фактически используют как значения по умолчанию) null-значения, все остальные вообще не допускают null-значений для некоторых типов. Это требует разделения целевых языков на 2 группы по типизации:

  • Определение: Статические целевые языки.
    Статическими будем называть целевые языки, использующие статическую типизацию. Это группа языков, в которых переменные связываются с определенным типом данных в момент объявления. Таковыми являются, например, Flash, C++, Java, C#.
  • Определение: Динамические целевые языки.
    Динамическими назовем те целевые языки для которых характерна динамическая типизация. Это группа языков, в которых переменные связываются с типом данных в момент присваивания им значения. Это, например, JavaScript, PHP, Neko, Flash 6-8.

Не о чем беспокоиться при работе с null для языков с динамической типизацией, так как в них переменные обнуляемы, в то время, как языки со статической типизацией требуют внимания.

При работе с языками со статической типизацией объекты базовых типов при создании могут быть инициализированы значениями по умолчанию.

Определение: Значения по умолчанию.
В языках со статической типизацией базовые типы имеют следующие значения по умолчанию:

  • Int: 0
  • Float: NaN на Flash, 0.0 на остальных статических целях
  • Bool: false

Как следствие, компилятор Haxe не допускает присваивания null базовым типам в языках со статической типизацией. Чтобы сделать допустимым такое присваивание необходимо обернуть базовый тип следующим образом Null<T>:

Таким же образом, базовые типы не могут быть сравнимы с null, если они не обёрнуты должным образом:

Это ограничение распространяется на все ситуации, где работает унификация.

На языках со статической типизацией  Null<T>, Null<Bool>, Null<Float> могут быть использованы чтобы сделать допустимым null-значения. На языках с динамической типизацией это не будет иметь эффекта. Null<T> также может быть использовано с другими типами данных для указания того, что null-значение допустимо.

Если null-значение будет «скрыто» Null<T> или динамической типизацией, при присваивании базовому типу будет использовано значение по умолчанию:

Подготовлено по материалам раздела Nullability официального учебника языка Haxe.

Артём Мисесин
Артём Мисесин

Latest posts by Артём Мисесин (see all)

4 thoughts on “2.2 Обнуляемые типы

  1. — Укажите номер раздела (2.2) в заголовке и сделайте его постоянной ссылкой.
    — Ничего не выбрасывайте из учебника. он и так предельно лаконичен.
    — Разберитесь о чем идет речь. Найдите аналогичный материал в других учебниках. Напишите свой код для проверки и демонстрации. Потом смело пишите текст.
    — Этот язык часто используют для генерации кода на других (целевых) языках. Нужно это как-то четко объяснить.
    — Может лучше nullable = обнуляемые? Тогда первое определение будет выглядеть так:
    Определение: Обнуляемое (nullable). Тип данных в Haxe называется обнуляемым (nullable), если null является допустимым значением для него.
    — У вас рассматриваются две категории целевых языков — со статической и динамической типизацией. Нужно об этом написать и дать ссылки на вики при первом упоминании.
    — Сделайте текст осмысленным. Что это за «значения по умолчанию на статических целях»?
    — Не ленитесь гуглить сомнительные слова, обороты и словоупотребление.

  2. Стало лучше, но замечаний было всё еще слишком много. Я просто исправил то, что мне не понравилось. Надеюсь вы не обидитесь.
    Останется только последний пример про тип возвращаемого функцией значения — это ведь следующий раздел? Зачем Вы это сюда вставили?
    Лучше напишите свой собственный код и пояснения к нему.

Добавить комментарий