變數是重要的程式設計概念,區塊支援動態支援 但不必多費工夫 可以新增資訊,支援強型別 (或靜態輸入) 例如 Java 或 C
詳情請造訪這個網頁 深入瞭解動態輸入語言與靜態輸入語言的差異
區塊提供可變動的動態下拉式選單方塊 使用者提供的變數名稱以下列舉一個例子。
根據預設,Blockly 允許將任何類型指派給變數,且所有類型 Blockly 提供的產生器適用於動態輸入的語言。如果您是 改為使用輸入的語言,您可以將 Blockly 設為支援 包括:
- 指定變數類型及其區塊, 包括 getter 和 setter
- 設定工具箱 使用您的變數類型和區塊
- 定義產生器 變數及其區塊
未類型的變數區塊
存取及操控變數最基本的區塊是 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() 取得特定類型的所有變數。