程式碼生成

程式碼產生是指將工作區中的區塊轉換為可執行的程式碼字串的程序。

程式碼產生功能非常重要,因為它可讓區塊實際執行操作,例如評估算術運算式、在迷宮中移動角色,或設定網路商店!

您無法直接「執行」區塊。而是產生程式碼字串,然後執行這些字串。

語言代碼產生器

如要產生程式碼,您必須選擇要產生的文字語言。這是因為每種語言都有專屬的程式碼產生器。

語言程式碼產生器 (通常稱為程式碼產生器) 是一種類別,可處理產生特定語言程式碼的規則,但不針對個別區塊。舉例來說,它會處理格式化註解、縮排陳述式和引號字串等事項。

Blockly 提供 5 個內建程式碼產生器:

  • JavaScript ES5
  • Python 3
  • Lua 5.1
  • Dart 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 的範圍。

詳情請參閱「產生及執行程式碼」。