【Google Blocklyを使って遊ぼう】loop_blocks.jsonのブロック
Blocklyに最初から組み込まれているブロックが沢山あります。
今回はloop_blocks.jsonに定義されているブロックについて説明します。
このファイルには繰り返しを操作するブロックが定義されています。
controls_repeat_ext
controls_repeat_extはfor文を表すブロックです。この入力端子があり、この入力端子に接続した数値ブロックの値の回数分繰り返しが行われます。
また、このブロックには内部アクション端子があり、この端子に接続したアクションが繰り返し実行されます。
controls_repeat_extの定義
{
"type": "controls_repeat_ext",
"message0": "repeat %1 times %2 do %3",
"args0": [
{
"type": "input_value",
"name": "TIMES"
},
{
"type": "input_dummy"
},
{
"type": "input_statement",
"name": "DO"
}
],
"previousStatement": null,
"nextStatement": null,
"colour": 120,
"inputsInline": true,
"tooltip": "Do some statements several times.",
"helpUrl": "https://en.wikipedia.org/wiki/For_loop"
}
controls_repeat_extの生成コード
for (var count = 0; count < [入力端子]; count++) {
[内部アクション端子]
}
controls_whileUntil
controls_whileUntilはwhile文を表すブロックです。この入力端子があり、この入力端子には条件式を接続します。
また、このブロックにはセレクトボックスが存在し入力端子で設定した条件式を満たす時に繰り返すか、満たさない時に繰り返すかを決めることができます。
このブロックには内部アクション端子があり、この端子に接続したアクションが繰り返し実行されます。
controls_whileUntilの定義
{
"type": "controls_whileUntil",
"message0": "repeat %1 %2 do %3",
"args0": [
{
"type": "field_dropdown",
"name": "MODE",
"options": [
[
"while",
"WHILE"
],
[
"until",
"UNTIL"
]
]
},
{
"type": "input_value",
"name": "BOOL",
"check": "Boolean"
},
{
"type": "input_statement",
"name": "DO"
}
],
"previousStatement": null,
"nextStatement": null,
"colour": 120,
"tooltip": "While a value is false, then do some statements.",
"helpUrl": "https://github.com/google/blockly/wiki/Loops#repeat"
}
controls_whileUntilの生成コード
// セレクトボックスでwhileを選択
while([入力端子]){
[内部アクション端子]
}
// セレクトボックスでuntilを選択
while(![入力端子]){
[内部アクション端子]
}
controls_for
controls_forはfor文の各値を細かく設定するブロックです。この入力端子が3つあります、1つ目の入力端子でfor文のカウントの開始値を設定します、2つ目の入力端子でfor文のカウントの終了値を設定します、3つ目の入力端子でfor文のカウントの増加値を設定します。
また、このブロックにはセレクトボックスが存在しカウンタとして使う変数を決めることができます。
このブロックには内部アクション端子があり、この端子に接続したアクションが繰り返し実行されます。
controls_forの定義
{
"type": "controls_for",
"message0": "count with %1 from %2 to %3 by %4 do %5",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": null
},
{
"type": "input_value",
"name": "FROM",
"check": "Number",
"align": "RIGHT"
},
{
"type": "input_value",
"name": "TO",
"check": "Number",
"align": "RIGHT"
},
{
"type": "input_value",
"name": "BY",
"check": "Number",
"align": "RIGHT"
},
{
"type": "input_statement",
"name": "DO"
}
],
"inputsInline": true,
"previousStatement": null,
"nextStatement": null,
"colour": 120,
"helpUrl": "https://github.com/google/blockly/wiki/Loops#count-with"
}
controls_forの生成コード
for ([セレクトボックスで選択した変数] = [1つ目の入力端子]; [セレクトボックスで選択した変数] <= [2つ目の入力端子]; [3つ目の入力端子]++) {
[内部アクション端子]
}
controls_forEach
controls_forEachはfor-each文を表すブロックです。この入力端子があり、この入力端子に設定した配列に対してfor-eachを行います。
また、このブロックにはセレクトボックスが存在します、セレクトボックスでfor-eachで繰り返す各要素を格納する変数名を指定します。
このブロックには内部アクション端子があり、この端子に接続したアクションが繰り返し実行されます。
controls_forEachの定義
{
"type": "controls_forEach",
"message0": "for each item %1 in list %2 do %3",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": null
},
{
"type": "input_value",
"name": "LIST",
"check": "Array"
},
{
"type": "input_statement",
"name": "DO"
}
],
"previousStatement": null,
"nextStatement": null,
"colour": 120,
"helpUrl": "https://github.com/google/blockly/wiki/Loops#for-each"
}
controls_forEachの生成コード
var [セレクトボックスで選択した変数];
for (var item_index in [入力端子で選択した変数]) {
[セレクトボックスで選択した変数] = [入力端子で選択した変数][item_index];
[内部アクション端子]
}
controls_flow_statements
controls_flow_statementsはbreak・continue文を表すブロックです。このブロックにはセレクトボックスが存在し、breakかcontinueを選択することができます。
controls_flow_statementsの定義
{
"type": "controls_flow_statements",
"message0": "%1 of loop",
"args0": [
{
"type": "field_dropdown",
"name": "FLOW",
"options": [
[
"break out",
"BREAK"
],
[
"continue with next iteration",
"CONTINUE"
]
]
}
],
"previousStatement": null,
"colour": 120,
"helpUrl": "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks",
"TODO(#375)": "https://github.com/google/blockly-android/issues/375"
}
controls_flow_statementsの生成コード
// break outを選択
break;
// continue with next iterationを選択
continue;