產生程式碼是將工作區區塊轉換成 程式碼字串。
程式碼生成極為重要,因為這樣可讓區塊 實際「操作」的方法,例如評估算術運算式、移動字元 或是架設線上商店!
您無法「跑步」直接封鎖相反地,您可以產生程式碼字串 或是執行這些 Pod
程式碼產生器
如要產生程式碼,您必須選擇偏好的文字語言 。
程式碼產生器是一種類別,可處理規則來產生 而非針對特定語言,而不是針對特定語言。適用對象 會處理註解格式、縮排語句 引號中的字串。
// javascriptGenerator is a code generator that makes javascript strings.
import {javascriptGenerator} from 'blockly/javascript';
const code = javascriptGenerator.workspaceToCode(myWorkspace);
Blockly 提供 5 種內建程式碼產生器:
- JavaScript ES5
- Python 3
- Lua 5.1
- 飛鏢 2
- PHP 7
您可以採用下列其中一種方法匯入及使用產生器。
模組
import {javascriptGenerator} from 'blockly/javascript';
import {pythonGenerator} from 'blockly/python';
import {phpGenerator} from 'blockly/php';
import {luaGenerator} from 'blockly/lua';
import {dartGenerator} from 'blockly/dart';
const jsCode = javascriptGenerator.workspaceToCode(workspace);
const pythonCode = pythonGenerator.workspaceToCode(workspace);
const phpCode = phpGenerator.workspaceToCode(workspace);
const luaCode = luaGenerator.workspaceToCode(workspace);
const dartCode = dartGenerator.workspaceToCode(workspace);
脫衣褲
加入 Blockly 後,請務必加入產生器。
<script src="https://unpkg.com/blockly"></script>
<script src="https://unpkg.com/blockly/javascript_compressed"></script>
<script src="https://unpkg.com/blockly/python_compressed"></script>
<script src="https://unpkg.com/blockly/php_compressed"></script>
<script src="https://unpkg.com/blockly/lua_compressed"></script>
<script src="https://unpkg.com/blockly/dart_compressed"></script>
const jsCode = javascript.javascriptGenerator.workspaceToCode(workspace);
const pythonCode = python.pythonGenerator.workspaceToCode(workspace);
const phpCode = php.phpGenerator.workspaceToCode(workspace);
const luaCode = lua.luaGenerator.workspaceToCode(workspace);
const dartCode = dart.dartGenerator.workspaceToCode(workspace);
本機指令碼
加入 Blockly 後,請務必加入產生器。
<script src="blockly_compressed.js"></script>
<script src="javascript_compressed.js"></script>
<script src="python_compressed.js"></script>
<script src="php_compressed.js"></script>
<script src="lua_compressed.js"></script>
<script src="dart_compressed.js"></script>
const jsCode = javascript.javascriptGenerator.workspaceToCode(workspace);
const pythonCode = python.pythonGenerator.workspaceToCode(workspace);
const phpCode = php.phpGenerator.workspaceToCode(workspace);
const luaCode = lua.luaGenerator.workspaceToCode(workspace);
const dartCode = dart.dartGenerator.workspaceToCode(workspace);
如果這份清單未包含要產生程式碼的語言,您可以 您也可以建立自訂程式碼產生器。
區塊程式碼產生器
產生程式碼的第二部分是定義 。你必須為每個封鎖條件分別建立不同語言 要生成的內容
javascriptGenerator.forBlock['my_custom_block'] = function(block, generator) { /* ... */ }
不同區塊的程式碼產生器運作方式不同:
但這些函式都需要收集欄位值, 收集內部方塊然後將程式碼串連起來 這些字串
代別
可以在使用者提出要求時產生作業 (例如, 或持續執行該動作
持續更新可讓您在每次有使用者 變更。產生程式碼是一項快速作業,因此效能不彰 會有什麼影響方法是使用事件監聽器。
const supportedEvents = new Set([
Blockly.Events.BLOCK_CHANGE,
Blockly.Events.BLOCK_CREATE,
Blockly.Events.BLOCK_DELETE,
Blockly.Events.BLOCK_MOVE,
]);
function updateCode(event) {
if (workspace.isDragging()) return; // Don't update while changes are happening.
if (!supportedEvents.has(event.type)) return;
const code = javascriptGenerator.workspaceToCode(workspace);
document.getElementById('textarea').value = code;
}
workspace.addChangeListener(updateCode);
前置碼或郵遞區號
產生程式碼後,您可以加入 (選用) 前置碼或 。
let code = javascriptGenerator.workspaceToCode(workspace);
// Add a preamble and a postscript to the code.
code = `const def = 'some value';\n${code}\nkickOffSomeFunction();\n`;
前置碼程式碼通常用於在開頭加入外部定義 程式碼區段PostScript 程式碼通常用於呼叫函式以啟動 程式碼結尾的行為
如果產生的程式碼可以照原樣執行,就不需要加入 開頭或事前文字
執行
產生程式碼後,您需要瞭解執行方式。 決定執行方式的方法會因應用程式而異,而且不在範圍之內 方塊
對於 JavaScript 程式碼, Blockly 團隊建議使用 JSInterpreter。其他語言需要其他工具才能使用。