コード生成は、ワークスペースのブロックを実行可能なコード文字列に変換するプロセスです。
コード生成は非常に重要です。ブロックが実際に実行できるようにするためです。たとえば、ブロックは算術式の評価、迷路内のキャラクターの移動、オンライン ショップの構成などを実行できます。
ブロックを直接「実行」することはできません。代わりに、コード文字列を生成し、それを実行します。
言語コード生成ツール
コードを生成するには、生成するテキストベースの言語を選択する必要があります。これは、各言語に独自のコード生成ツールがあるためです。
言語コード生成ツール(一般にコード生成ツールと呼ばれます)は、特定の言語に固有のコード生成ルールを処理するクラスです。ただし、個々のブロックに固有のコード生成ルールは処理しません。たとえば、コメントの書式設定、ステートメントのインデント、文字列の引用符などの処理を行います。
Blockly には、次の 5 つの組み込みコード生成ツールがあります。
- JavaScript ES5
- Python 3
- Lua 5.1
- Dart 2
- PHP 7
このリストにコードを生成したい言語が含まれていない場合は、カスタム言語コード生成ツールを作成できます。簡単な例については、カスタム生成ツールを作成する Codelab をご覧ください。ここでは、JSON 言語コード生成ツールを作成します。より複雑な例については、JavaScript コード生成ツールをご覧ください。使用する組み込みブロックのブロックコード生成ツールも作成する必要があります。
ブロックコード生成ツール
各ブロックは独自のコードを生成します。ブロックを作成する場合は、サポートする言語ごとに個別のブロックコード ジェネレータを作成する必要があります。
ブロックコード生成ツールは、そのブロックのコード文字列を返す関数です。たとえば、2 つの数値を比較するブロックは '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 の範囲外です。
詳細については、コードを生成して実行するをご覧ください。