Генерация кода — это процесс преобразования блоков рабочей области в строку кода, которую можно выполнить.
Генерация кода чрезвычайно важна, поскольку именно она позволяет вашим блокам выполнять определенные действия, например вычислять арифметические выражения, перемещать персонажа по лабиринту или настраивать интернет-магазин!
Вы не можете «запускать» блоки напрямую. Вместо этого вы генерируете строки кода, а затем выполняете их.
Генераторы языковых кодов
Чтобы сгенерировать код, вам нужно выбрать, какой текстовый язык вы хотите сгенерировать. Это связано с тем, что каждый язык имеет свой собственный генератор кода.
Генератор языкового кода (обычно называемый генератором кода ) — это класс, который обрабатывает правила генерации кода, специфичные для данного языка, но не специфичные для отдельного блока. Например, он обрабатывает такие вещи, как форматирование комментариев, отступы и цитирование строк.
Blockly предоставляет 5 встроенных генераторов кода:
- JavaScript ES5
- Питон 3
- Луа 5.1
- Дарт 2
- PHP 7
Если в этот список не входит язык, для которого вы хотите сгенерировать код, вы можете создать собственный генератор кода языка. Простой пример см. в разделе « Создание собственного генератора », где создается генератор кода языка JSON. Более сложный пример смотрите в генераторе кода JavaScript . Обратите внимание, что вам также необходимо написать генераторы блочного кода для любых встроенных блоков, которые вы хотите использовать.
Генераторы блочного кода
Каждый блок отвечает за генерацию собственного кода. Когда вы создаете блок, вам необходимо написать отдельный генератор блочного кода для каждого языка, который вы хотите поддерживать.
Генератор блочного кода — это функция, которая возвращает код этого блока в виде строки. Например, блок, сравнивающий два числа, возвращает строку вида 'a < b'
, а блок, представляющий оператор if, возвращает строку вида 'if (...) {\n...\n};\n'
.
import {javascriptGenerator} from 'blockly/javascript';
import {pythonGenerator} from 'blockly/python';
// Write block-code generators for JavaScript and Python.
javascriptGenerator.forBlock['my_custom_block'] = function(block, generator) { /* ... */ };
pythonGenerator.forBlock['my_custom_block'] = function(block, generator) { /* ... */ };
Генераторы блочного кода вызываются генераторами языкового кода.
Дополнительную информацию см. в разделе Генераторы блочного кода .
Генерация и запуск кода
Ваше приложение может генерировать код в любое время. Например, он может генерировать код, когда конечный пользователь нажимает кнопку или каждый раз, когда пользователь вносит изменения.
После того, как вы сгенерировали код, вам нужно выяснить, как его выполнить. Решение о том, как его выполнить, очень зависит от приложения и выходит за рамки Blockly.
Дополнительные сведения см. в разделе Создание и запуск кода .