変数

変数はプログラミングにおける重要な概念です。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() を使用して、特定の型のすべての変数を取得します。