Язык программирования AppScript

AppScript используется для написания программного кода. Язык включает в себя все привычные программные конструкции и программные элементы, как то:

  • переменные (типизация динамическая)
  • операторы (арифметические, логические, сравнение и т.д.)
  • управляющие конструкции (if, for, while и т.д.)
  • предопределенные (внутренние) функции (пользовательские функции создаются через тэг <fn>)
  • зарезервированные слова (var, this)
  • предопределенные переменные (global, arguments)
  • комментарии (однострочные // или многострочные /* */)


AppXML-конструкции (тэги) в AppScript рассматриваются как потенциальные объекты, которыми можно манипулировать: создавать, менять их свойства, показывать/скрывать, добавлять внутрь других конструкций (создавая конструкции произвольной сложности) и т.д.

  • Чтобы AppXML-конструкция стала доступна в AppScript для манипуляции, её нужно описать в секции <common> и задать значение атрибута id у верхнего тэга, а также у каждого тэга внутри конструкции, к которому нужно обращаться напрямую. Дальнейшее обращение будет выполняться через указанное id.
  • После первого обращения к AppXML-конструкции по её id, создается соответствующий программный (визуальный/невизуальный) объект, к которому можно обращаться по этому же id. Внимание! Для каждой AppXML-конструкции в <common> создается только один программный объект. Массовое создание однотипных программных объектов, но с разными id, выполняется с помощью AppScript-функции createObject.
  • Каждый программный объект имеет методы (набор методов более-менее унифицирован) для манипуляции данным объектом.
  • Каждый программный объект имеет набор событий, представленных тэгами с соответствующими именами.



<!-- Пример -->
<AppXML title="Моё приложение">
 
 
   <!-- Все, что находится в этой секции, исполняется сразу (т.е. все объекты, соответствующие тэгам, создаются сразу при запуске программы). -->
   <main>
 
      <action>
         <![CDATA[  // использование CDATA необязательно, но рекомендовано
 
         // AppScript-код в этом тэге выполняется тут же, в момент создания объекта типа action (неименованная функция, удаляется сразу после выполнения)
 
         println("Hello, world!");  // используем appscript-метод
         for(var i = 0; i < 10; i++) {
            println(i + ". result is " + twicer(i)); // программный объект с id twicer (а попросту - пользовательская функция) будет создан единожды и только в момент первого обращения к нему по id
         }
 
         ]]>
      </action>
 
      <!-- Описываем главное окно приложения (будет создано автоматически, т.к. описание находится внутри <main>) -->
      <window id="mainWindow">
         <panel background-color="green" position="center">
            <label text="Hello, world!" color="yellow" font-style="bold" align="center" />
         </panel>
 
         <button text="Показать заголовок окна" position="top">
            <onAction>
               msg(mainWindow.title); // используем appscript-метод и обращение к атрибуту окна
            </onAction>
         </button>
 
         <button text="Показать заголовок кнопки" position="bottom">
            msg(this.text); // обращаемся через this к объекту, инициировавшему данное событие (здесь инициировано событие onAction, но тэг можно не писать)
         </button>
 
         <button text="Заменить центральную часть" position="left">
            mainWindow.addObject(p_1);  // используем объектный метод (т.е. метод программного объекта)
            p_1.visible = !p_1.visible; // при повторном нажатии кнопки панель исчезнет, при следующем - появится и т.д.
         </button>
 
         <button text="Изменить текст" position="right">
            l_1.text += " ! "; // будет работать только после нажатия кнопки "Заменить центральную часть", т.к. до этого объект l_1 не будет доступен ни для создания, ни для манипуляций
         </button>
 
         <onCreated>
            println("Окно с заголовком \"" + this.title + "\" было создано в " + currentTime());
         </onCreated>
      </window>
 
   </main>
 
 
   <!-- Все в этой секции будет создаваться по мере обращения к этим тэгам (по id верхних тэгов) -->
   <common>
 
      <!-- Пользовательская функция, увеличивающая входящее значение в два раза. -->
      <fn id="twicer" args="a">
         <![CDATA[  // использование CDATA необязательно, но рекомендовано
 
         // AppScript-код этой функции выполняется только при обращении к этой функции по её id (в данным случае twicer) (в отличие от кода внутри <action>)
 
         var result = a * 2; // объявляем переменную и сразу её инициализируем
         return result;      // возвращаем результат
 
         ]]>
      </fn>
 
      <panel id="p_1" background-color="black" border="line:green" visible="false">
         <label id="l_1" text="Hello, another world!" color="white" font-style="bold,italic" align="center" />
      </panel>
   </common>
 
 
</AppXML>
 
script/intro.txt · Последние изменения: 29/10/2020 16:32 (внешнее изменение)
 
Recent changes RSS feed Valid XHTML 1.0 Valid CSS