変数はプログラミングにおける重要な概念です。Blockly は動的なサポートを Python や JavaScript などの型付き言語ですが、少し追加作業で 厳密に型指定された言語(または静的型付き)をサポートするための情報を追加できます。 言語など)に対応しています。
詳しくはこちらをご覧ください。 動的な型付き言語と静的な型付き言語に関する情報です。
Blockly は変数フィールドを提供します。変数フィールドは、表示する動的なプルダウン ボックスです。 ユーザーが指定した変数の名前。以下にその例を示します。
デフォルトでは、Blockly は変数に任意の型を代入することができ、 Blockly が提供しているジェネレータは、動的な型付き言語用です。もし 代わりに型言語を使用する場合は、次のようにして Blockly をサポートするよう設定できます。 次のとおりです。
- 変数のタイプとそのブロックを指定する これにはゲッターとセッターも含まれます
- ツールボックスを設定する 変数の型とブロックを使用します。
- ジェネレータを定義する 参照できます。
型指定のない変数ブロック
変数にアクセスして操作するための最も基本的なブロックは、ゲッターです。 設定します。それでは、Blockly を使用してゲッター ブロックとセッター ブロックを 提供します。
JSON
// Block for variable getter.
{
"type": "variables_get",
"message0": "%1",
"args0": [
{ // Beginning of the field variable dropdown
"type": "field_variable",
"name": "VAR", // Static name of the field
"variable": "%{BKY_VARIABLES_DEFAULT_NAME}" // Given at runtime
} // End of the field variable dropdown
],
"output": null, // Null means the return value can be of any type
...
},
// Block for variable setter.
{
"type": "variables_set",
"message0": "%{BKY_VARIABLES_SET}",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "%{BKY_VARIABLES_DEFAULT_NAME}"
},
{
"type": "input_value", // This expects an input of any type
"name": "VALUE"
}
],
...
}
JavaScript
// Block for variable getter.
Blockly.Blocks['variables_get'] = {
init: function() {
this.appendDummyInput()
.appendField(new Blockly.FieldVariable("VAR_NAME"), "FIELD_NAME");
this.setOutput(true, null);
...
}
};
// Block for variable setter.
Blockly.Blocks['variables_set'] = {
init: function() {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("set")
.appendField(new Blockly.FieldVariable("VAR_NAME"), "FIELD_NAME")
.appendField("to");
this.setOutput(true, null);
...
}
};
これにより、次の 2 つのブロックが作成されます。
注目すべき重要な点は、変数ゲッターの「output」を 戻り値は任意の型になります。また、この変数は セッターの入力でチェックは指定されていません。その結果、変数を 任意の型の値にできます。
型付き変数ブロック
型のチェックを適用するゲッターとセッターを追加できます。たとえば タイプ「Panda」の変数が作成された場合、次の定義では getter と setter を適切な型に置き換えます。
JSON
// Block for Panda variable getter.
{
"type": "variables_get_panda",
"message0": "%1",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "%{BKY_VARIABLES_DEFAULT_NAME}",
"variableTypes": ["Panda"], // Specifies what types to put in the dropdown
"defaultType": "Panda"
}
],
"output": "Panda", // Returns a value of "Panda"
...
},
// Block for Panda variable setter.
{
"type": "variables_set_panda",
"message0": "%{BKY_VARIABLES_SET}",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "%{BKY_VARIABLES_DEFAULT_NAME}",
"variableTypes": ["Panda"],
"defaultType": "Panda"
},
{
"type": "input_value",
"name": "VALUE",
"check": "Panda" // Checks that the input value is of type "Panda"
}
],
"previousStatement": null,
"nextStatement": null,
...
}
JavaScript
// Block for variable getter.
Blockly.Blocks['variables_get_panda'] = {
init: function() {
this.appendDummyInput()
.appendField(new Blockly.FieldVariable(
"VAR_NAME", ['Panda'], 'Panda'), "FIELD_NAME");
this.setOutput(true, 'Panda');
...
}
};
// Block for variable setter.
Blockly.Blocks['variables_set_panda'] = {
init: function() {
this.appendValueInput("NAME")
.setCheck('Panda')
.appendField("set")
.appendField(new Blockly.FieldVariable(
"VAR_NAME", null, ['Panda'], 'Panda'), "FIELD_NAME")
.appendField("to");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
...
}
};
これにより、ゲッターとセッターの 2 種類のブロックが作成されます。プルダウンのみ
Panda 型のディスプレイ変数を使用できます。これらの入力と出力は
タイプ パンダの接続があります。フィールドの defaultType
は 1 に設定する必要があります
variableTypes
配列の値の結合を行います。defaultType
を設定しない間
variableTypes
配列を指定するとエラーがスローされます。
デフォルトでは、コンテンツの種類を示す視覚的なインジケーターは表示されず、 分析できます変数のタイプを簡単に区別するには、色で区別します。
ツールボックスに変数を追加する
この新しいタイプの変数をユーザーにとって便利なものにするには、 新しい変数を作成して使用します。
新しい動的なカテゴリを作成する を使用します。
新しいゲッターとセッターをカテゴリに追加します。
[変数を作成] ボタン
次に、ユーザーには変数を作成する方法が必要です。最も簡単な方法は、 "変数を作成"ボタン。
ボタンを作成する際、コールバック呼び出しを行う
Blockly.Variables.createVariableButtonHandler(button.getTargetWorkspace(), null, 'panda');
これにより、Panda 型の変数が作成されます。
ユーザーが複数の型の変数を作成できるようにする最も簡単な方法は、 1 つの「作成」タイプごと(例: 文字列変数の作成、番号の作成)ボタン Variable、Create Panda Variable)。
変数の型が 2 つか 3 つ以上あると、 ボタンが多すぎる。そのような場合は @blockly/plugin-typed-variable-modal ユーザーが目的の変数タイプを選択できるポップアップを表示します。
生成ツールを定義する
最後に、ブロックコード ジェネレータを定義する必要があります。 使用します。変数のリストには直接アクセスすることもできます。 Blockly.Workspace.getAllVariables() を使用して Blockly.Workspace.getVariablesOfType() を使用して、特定の型のすべての変数を取得します。