Variables

變數是重要的程式設計概念,區塊支援動態支援 但不必多費工夫 可以新增資訊,支援強型別 (或靜態輸入) 例如 Java 或 C

詳情請造訪這個網頁 深入瞭解動態輸入語言與靜態輸入語言的差異

區塊提供可變動的動態下拉式選單方塊 使用者提供的變數名稱以下列舉一個例子。

根據預設,Blockly 允許將任何類型指派給變數,且所有類型 Blockly 提供的產生器適用於動態輸入的語言。如果您是 改為使用輸入的語言,您可以將 Blockly 設為支援 包括:

未類型的變數區塊

存取及操控變數最基本的區塊是 getter 和 setter 區塊現在來看看 Blockly 的 getter 和 setter 區塊 。

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);
    ...
  }
};

這會建立下列兩個區塊:

值得注意的是,藉由設定變數 getter 的「output」 傳回空值,傳回值可以是任何類型。另外,請注意 setter 的輸入內容不會指定任何檢查。因此,您可以將這個變數 設為任何類型的值

輸入的變數區塊

您可以新增會強制執行類型檢查的 getter 和 setter。舉例來說,如果您在 建立了「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);
    ...
  }
};

這會建立兩種類型的區塊:getter 和 setter。只有他們的下拉式選單 顯示「Panda」類型的顯示變數。其輸入和輸出內容只接受 連線至 Panda 類型的連線欄位的 defaultType 必須設為 1 這些值都屬於 variableTypes 陣列的值。以下期間沒有設定「defaultType」 提供 variableTypes 陣列會產生錯誤。

在預設情況下,沒有任何視覺指標可向使用者說明 區分變數類型最簡單的方法就是依「顏色」

將變數新增至 Toolbox

為了讓這個新的變數能夠有效為使用者提供實用服務,您必須新增 建立及使用新變數

建立新的動態類別

將新的 getter 和 setter 新增至類別。

建立變數按鈕

接下來,使用者需要設法建立變數。最簡單的方法是使用 「建立變數」按鈕

建立按鈕時,進行回呼呼叫

Blockly.Variables.createVariableButtonHandler(button.getTargetWorkspace(), null, 'panda');

系統就會建立 Panda 類型變數!

讓使用者能夠建立多種類型的變數,最簡單的方法就是 one「建立」每種類型的按鈕 (例如:建立字串變數、建立號碼 變數、建立 Panda 變數)。

如果變數類型超過二或三種 按鈕數量過多。此時,請考慮使用 @blockly/plugin-typed-variable-modal 顯示彈出式視窗,讓使用者可以選取需要的變數類型。

定義產生器

最後,請定義區塊程式碼產生器 新的變數區塊您也可以直接存取 使用 Blockly.Workspace.getAllVariables() 取得所有型別的所有變數,或 Blockly.Workspace.getVariablesOfType() 取得特定類型的所有變數。