ТОМ2: типы значений

Материал из IFВики
Версия от 13:51, 3 мая 2014; ASBer (обсуждение | вклад) (spcvalue (спецзначение))
Перейти к навигации Перейти к поиску

Каждое значение в языке ТОМ2 имеет свой тип.

Значение любого типа имеет набор свойств, к которым возможно обращение через точку:

A.B

- где A - значение, а B - имя его свойства


Узнать тип любого значения можно через свойство ".type":

var A = "test"
%{A.type}


Простые типы

К простым типам данных относятся: bool (булево), number (число), string (строка), spcvalue (спецзначение), course (направление).

bool (булево)

bool – булево. Логический тип данных. Может принимать значение true ('да') или false ('нет', 'ошибка'). Над данными логического типа действуют операции булевой алгебры.

К любому булеву значению можно прикрепить текстовый комментарий. Это позволяет давать более естественные ответы чем 'да' или 'нет'.

Пример:

var A = да, "вы правы"
var B = нет, "я так не думаю"
var C = ошибка, "это невозможно!"

number (число)

number – число. Числовым типом может быть представлено любое целое число. Над данными числового типа действуют основные арифметические операции.

string (строка)

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

Пример:

"это строка"
"это тоже пример строки типа string"

spcvalue (спецзначение)

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

course (направление)

course – направление. Всего есть десять направлений: вверх, вниз, и компасные (север, юг, запад, восток, северо-запад, северо-восток, юго-запад, юго-восток).

Объектные типы

К объектным типам данных относятся: 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 (или-список)

???