Каждое значение в языке ТОМ2 имеет свой тип.
Значение любого типа имеет набор свойств, к которым возможно обращение через точку:
A.B
- где A - значение, а B - имя его свойства
Узнать тип любого значения можно через свойство ".type":
var A = "test" %{A.type}
Содержание
Простые типы
К простым типам данных относятся: bool (булево), number (число), string (строка), spcvalue (спецзначение), course (направление).
bool (булево)
Логический тип данных. Может принимать значение "да" (true) или "нет" (false). Над данными логического типа действуют операции булевой алгебры.
number (число)
Числовым типом может быть представлено любое целое число. Над данными числового типа действуют основные арифметические операции.
string (строка)
Строковым типом может быть представлена любая последовательность символов, в том числе и пустая. В выражениях строка заключается в двойные кавычки - "это строка".
spcvalue (спецзначение)
Платформа имеет фиксированный набор служебных слов используемых в коде игры. Все эти слова имеют тип "спецзначение". В режиме "в игре" спецзначения не доступны.
Объектные типы
К объектным типам данных относятся: object (объект), property (свойство), attribute (признак), relation (отношение), class (класс), location (локация), word (слово), preposition (предлог).
Значения этих типов подразумевают некоторую сущность, обладающую именем, свойствами и поведением.
Каждое значение объектного типа может принадлежать некоторому классу или списку классов. Класс, назначенный значению первым, является основным классом и не может быть отменён в последствии.
Тип и классы в свою очередь частично (или полностью) определяют поведение объекта.
Основное отличие типов от классов заключается в том, что поведение класса объекта программируется разработчиком стандартной библиотеки или игры, в то время как поведение типа жёстко определено разработчиком платформы.
Все значения объектных типов имеют конструктор - код выполняемый во время создания объекта.
Свойства у объекта могут быть 3х видов:
- Системные свойства: type, name, key, loc, pos и т.д. Подробнее см. [системные свойства].
- Классовые свойства - свойства унаследованные от классов объекта. Эти свойства могут быть переопределены операцией присвоения:
А.Б = В.
- Собственные свойства - определённые в конструкторе как переменная:
object A { var Б = В }.
Свойства объектов также могут быть вычисляемыми. Синтаксис вычисляемого свойства:
var А = { <код> }
Код свойства выполняется при каждом обращении к свойству объект, возвращенное значение является значением свойства.
Объект может содержать в себе множество вложенных объектов.
Смысловая интерпретация вложения одного объекта в другой может быть различной и зависит как от вида вложения так и от замысла автора игры.
Вложения объектов могут быть 3х видов:
- inside (внутри) - подразумевает расположение объектов внутри полости другого объекта. Примеры: инвентарь ГГ, содержимое сундука.
- outside (снаружи) - подразумевает расположение объектов на внешней поверхности другого объекта. Примеры: одежда ГГ, предметы на столе.
- part (часть) - подразумевает что объекты являются частями другого объекта. Примеры: руки, ноги ГГ, дверной замок.
Директивы вложения имеют следующий синтаксис:
А inside Б //объект А помешается внутрь объекта Б А outside Б //объект А помешается на поверхность объекта Б А part Б //объект А становится частью объекта Б
Обращение к вложенным объектам осуществляется через системные свойства inside, outside и part
А.inside //возвращает список объектов, находящихся внутри объекта А А.outside //возвращает список объектов, находящихся на внешней поверхности объекта А А.part //возвращает список объектов, являющихся частями объекта А
Ниже приведены описания типов объектов:
object (объект)=
Объект. Этим типом может быть представлен любой существующий уникальный единичный объект.
property (свойство)
Зарезервировано. В настоящее время значения этого типа не используются.
class (класс)
???
location (локация)
???
word (слово)
???
preposition (предлог)
???
relation (отношение)
Зарезервировано. В настоящее время значения этого типа не используются.
Attribute (Признак)
???
Списки
and-list (и-список)
???
or-list (или-список)
???