понедельник, 5 ноября 2007 г.

X++: базисные типы данных

[id:54]

Как это не занудно, но я просто обязан об этом рассказать. Ведь это основательнейшая основа основ X++.
Итак, базисные типы данных или primitive data types:

Тип Ключевое слово Значение по умолчанию
Булев boolean false
Дата date null
Время timeOfDay 0
Перечисление <имя_перечисления> 0 или первый элемент в перечислении
Целое 32-бита int 0
Целое 64-бита int64 0
Вещественное real 0.00
Строка str "" (пустая строка)

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

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

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

Во-вторых, любой из указанных типов приводиться к булеву типу, а приведенные в таблице значения по умолчанию обозначают «Ложь»; все остальное это «Истина». По-простому говоря, вы можете переменную базисного типа вставлять в условный оператор, например вот так: if (my_integer_variable) или while (! my_date)

В-третьих, эти же типы данных используются при работе с базой данных. А как же эта проблема с NULL-значениями? Ведь известно, что в базах данных есть такое понятие, как «Отсутствие данных»/«Колбасы нет. Продавец ушла на склад»/«Извините, у нас учет». И это обозначается замечательным NULL-значением.
Создатели Аксапты отказались от концепции NULL. Каждое поле таблицы всегда содержит значение. А значения по умолчанию теперь интерпретируются системой как «Отсутствие данных».

Тип "Date" решил быть не как все; он всегда был какой-то не такой. Но о нем расскажу позже.

Итог:
  • для базисных типов данных есть значения по умолчанию;
  • для базисных типов данных нет понятия NULL;
  • для базисных типов данных значения по умолчанию играют роль NULL-значений.

Комментариев нет: