В следующей бете Realaxy Editor появится специальный язык, который создан для создания конечных автоматов. Вы можете описывать «траектории» работы приложения.
Создав специальный метод с аннотацией flow, код будет «останавливаться» и дожидаться события или группы событий. Этот скринкаст демонстрирует подписку на события через конструкцию catch в «бесконечном» цикле. Второй пример описывает составное событие нажатия клавиатуры и мышки, где используются конструкции and и not.
Так же язык имеет возможности для декларации специальных меток state и условных переходов — jump. Есть механизм связывания разных flow методов через конструкцию chain (дождаться результата другого flow) Язык очень полезен для создания карт событий в играх и интерфейсах.
То что сейчас описывается кучей логически не связанных обработчиков событий, теперь можно вынести в один метод, и включать и выключать подписку на события просто войдя или выйдя из точки исполнения.
Код игры «кто хочет стать миллионером» на Events Flow:
Нашей исходной точкой будет проект, получившийся при написании прошлой статьи.
Итак, мы имеем в своем распоряжении маленький модуль, написанный на AS (две строки обрамленные разными кавычками), язык myLanguages.escapedStrings, в котором есть пока только два скрипта для автоматизации, относящиеся к аспекту Intentions: один обрабатывает строку в одинарных кавычках, а другой — строку в двойных кавычках.
Пожалуй, реализацию этого кода нельзя назвать идеальной, но зато она является действующим примером простого и эффективного решения поставленной перед нами задачи: с помощью языка Intentions мы можем легко добавить новый функционал в редактор. Тот же самый путь можно реализовать чуть по другому, но именно Intentions — самый быстрый и простой.
С легкой печалью смотрим мы на нашу подопытную строку, сдобренную большим количеством слэшей. С одной стороны, задача решена, но с другой — как-то некрасиво, неправильно. Почему бы не предложить какой-нибудь несложный способ, при котором наша строка осталась бы прежней, но не вызывала бы ошибку «Incorrect string literal»? Нет ничего проще. Вспомним, что в некоторых других языках присутствует подобный функционал — например, в C# для таких имеется удобная конструкция @"… ", которая вполне подошла бы нам для портирования в качестве языкового расширения в ActionScript.
2011-06-22 16:15:34
... /language-extension-1/realaxy.jpg" alt="image ... такой средой будет Realaxy ActionScript Editor, бета ...
+ развернуть текстсохранённая копия
Существует укоренившееся мнение, что языковые расширения являются чем-то вроде фигур высшего пилотажа в программировании. Число публикаций на эту тему постоянно растет, однако доля русскоязычных среди них по понятным причинам ничтожна. Цель настоящего цикла статей — показать несложные и эффективные способы автоматизации обычных повседневных задач с помощью функционала для языковых расширений, доступного в средах разработки, основанных на Jetbrains MPS.
В нашем случае такой средой будет Realaxy ActionScript Editor, бета-версию которого можно загрузить здесь. Впрочем, все изложенное ниже за несколькими несущественными частностями также применимо и для написания языковых расширений под Java в редакторе MPS.