Рубрики
Без рубрики

Генерация Кода Проста – С Помощью Психологии

Метапрограммирование – это, типа, совершенно просто. С тегами java, meta, dsl, с открытым исходным кодом.

Psychology – это легкая и новая библиотека Java с открытым исходным кодом, созданная для того, чтобы сделать генерацию программного кода (или метапрограммирование) чистой и простой в реализации.

Генерация кода – это процесс, посредством которого исходный код программно генерируется на основе входных данных (также известный как модель).

Генерация кода обычно работает следующим образом:

  • Определите модель/используйте существующую модель.
  • Запрашивать модель и выдавать/генерировать исходный код
  • (Необязательно) После внесения изменений в модель повторно создайте исходный код.

Генератор кода, предназначенный для использования психологии, обычно использует модель POJO в качестве источника модельных данных.

Альтернативными вариантами использования являются использование аннотированного исходного кода Java с помощью функций Java JSR-269 ( link ).

Для простоты в этой статье будет рассмотрен сценарий PoJo.

Пример модели POJO показан ниже (для краткости опущены геттеры/сеттеры).

Эта модель POJO обычно создается из следующих типов источников:

  • JSON/XML/YAML/CSV
  • С помощью запроса к базе данных
  • DSL (языки, зависящие от домена)

Например:

записка: Важно, чтобы при создании экземпляра модели POJO выполнялся полный набор проверок и проверялись допущения. XML-схема или индивидуальная реализация DSL могут обеспечить ссылочную целостность и другие проверки.

Picocog выдает текст с помощью Java-кода. Никаких шаблонов, никакого отражения, никакой обработки тегов. Она преследует три основные цели:

  • Легко генерируйте код с четкими отступами.
  • Поддержка ввода линии вне последовательности.
  • Быть простым в отладке.

Психологию можно рассматривать как альтернативу StringBuilder, ориентированную на генерацию кода.

Picocog просто записывает строки — запоминается текущий уровень отступа.

Единственный класс, который требуется, – это класс Pico Writer.

Нет необходимости вручную помещать отступы в строковые литералы, но есть необходимость отмечать отступ слева и записывать строки кода с помощью методов writeln_r(), writeln_l() и writeln_lr().

Иногда бывает удобно захотеть выполнить запись в два или более места в документе одновременно — и чтобы эти места имели свой собственный стек отступов. Чтобы сделать это, вы добавляете заполнитель с помощью метода createDeferred Writer().

Возвращаемый объект записи можно рассматривать как указатель на строку, на которой он был создан.

Исходный код генерации кода:

Customer.java (сгенерировано Picocog):

Order.java (сгенерировано Picocog):

Первоначальный выпуск Psychology не поддерживает никакого текстового экранирования. Либо напишите свой собственный экранирующий код (довольно просто), либо используйте такую библиотеку, как Commons Lang для ваших потребностей в экранировании текста .

Психология написана на Java, но она может выдавать код на любом языке .

Генератор кода может быть создан таким образом, чтобы C#, Java, JavaScript и другие языки могли быть созданы из одной модели, включая аннотации, прикрепленные к коду Java (через JSR 269).

Иногда небольшая реализация – это все, что вам нужно.

Психология доступна сегодня на GitHub .

Другим подходом к генерации кода, не основанным на шаблонах, является превосходный язык xtend .

Для более подробного обсуждения генерации кода см. Отличную статью Мэтью Фаулера ” Генерация кода для чайников “.

записка: Эта статья взята (тем же автором) из следующего сообщения в блоге на medium.com

Оригинал: “https://dev.to/ainslec/metaprogramming-with-picocog-44od”