ТОМ - платформа для текстовых игр

Объявление

Платформа ТОМ предназначена для создания текстовых игр на русском языке и имеет развитый парсер, позволяющий взаимодействовать с играми с помощью команд на близком к естественному языке. В данный момент активно разрабатывается версия ТОМ 2.
Последнюю версию платформы можно скачать здесь.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ТОМ - платформа для текстовых игр » ТОМ 2 » 4й рефакторинг


4й рефакторинг

Сообщений 1 страница 10 из 10

1

Чтобы не забыть, буду сюда сваливать описания всех изменений языка ТОМL по мере их готовности.
Перелопачивать приходится весь анализатор команд, поэтому попутно убираю всякие несуразности.
-----------------------------------------------------------------------
Ключи: стал обязательным знак # в начале ключа.

Код:
#Ип2л //это ключ
"#МрЖп" //это тоже может быть ключ

-----------------------------------------------------------------------
Формы слова: кейворд "form" в описании словоформы более не используется.

Код:
word дом
{
  //form ИпЕч = "дом" //старый формат
  #ИпЕч = "дом" //актуальный формат

}

2

Прекрасно, пиши больше. Хоть что-то почитать на форуме будет :)

3

Условные конструкции возвращаются к стилю 1-го ТОМа:

Код:
if (<условие>) <код>
else <код>

//или
if (<условие>) 
  <код>
else 
  <код>

//или
if (<условие>) 
{ <код>
  <код>
  <код>
}
else 
{ <код>
  <код>
  <код>
}

4

Секции

Теперь могут быть 2х типов: текстовые и кодовые.

Код:
== <имя кодовой секции> ==
<код>
<код>
<код>
------------------ 
далее следует текст,
который выводится на экран
в том виде как есть.
текст {<вычисляемое выражение>}
текст

-- <имя текстовой секции> --
это текстовая секция
текст {<вычисляемое выражение>}
текст
==========
<код>
<код>
<код>

Смысл в том, что часто бывает нужно выводить большие массивы текста, и для текстовой платформы логично это делать как можно проще, вообще без каких-либо операторов.
Чередовать тест и код внутри секции можно с помощью разделителей ----- и =====.
И еще подумываю о разделителе для многострочных комментариев: *******

Сами секции можно рассматривать как отдельные методы объектов (и функций), и видимо так их и нужно описывать в документации.
Отличие от методов классического ООП в отсутствии параметров вызова, что делает синтаксис вызова метода неотличимым от синтаксиса свойства.

Код:
var X = А.Б // Б здесь может быть либо свойством А, либо его методом (секцией)

Отсутствие передаваемых параметров компенсируется видимостью предыдущего контекста:

Код:
object A
{
  -- Б --
  return Param1 + Param2
}

var Param1 = 2
var Param2 = 3
var X = А.Б

5

Получается сейчас вместо методов и есть эти самые секции? Я думал секции - это особые области объекта, типы которых строго ограничены и зашиты в платформу. Оказывается можно назначать всякие свои секции. Учитывая это я сейчас вижу их применение так:

Код:
объект Шкаф
{
  ...
  -- пустой --
  return items.count = 0;
}
...
если Шкаф не пустой то
  %В шкафу что-то есть!
иначе
  %Шкаф совершенно пуст.

В таком случае отсутствие параметров действительно серьёзный минус. Они бы очень помогли например в таких случаях:

Код:
объект Шкаф
{
  ...
  var запечатан = нет;
  -- запечатать (запечатывающий_объект) --
  Если запечатывающий_объект = тёмная:печать То
  {
    %шкаф был запечатан {запечатывающий_объект*Тп}
    запечатан = да, крепко запечатан;
  }
  иначе
    %шкаф ворчливым голосом отказался запечатываться {запечатывающий_объект*Тп};
}
...
Шкаф запечатать печатью;

Использовать контекст для передачи параметров выглядит мало того, что громоздко, так ещё и нарушает принципы функционального программирования. Функция в идеале не должна видеть контекст. Может можно что-то с этим сделать? Или параметры в секцию необходимо передавать очень редко?

6

Alexandr написал(а):

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

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

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

Посмотрим как пойдет, надо обкатать в боевых условиях, там будет видно.

7

По большей части рефакторинг завершен  :flirt:
Демо нормально загружается и даже отвечает на некоторые команды  :surprise:
Осталось лишь добиться того, чтобы работали и все остальные команды, работавшие ранее  %-)

8

А мне всегда казалось, что рефакторинг - это процесс приведения кода в порядок без потери/изменения функционала.

9

Ну в общем, конечно да.
Но на деле трудно бывает провести границу между глубоким рефакторингом и лёгким редизайном.

10

Думаю рефакторинг можно считать законченным.
Остались некоторые украшения синтаксиса, которые можно доделать позже.
Сейчас дорабатываю демо-пример, и в ближайшее время опубликую новую версию.


Вы здесь » ТОМ - платформа для текстовых игр » ТОМ 2 » 4й рефакторинг