【Google Blocklyを使って遊ぼう】logic_blocks.jsonのブロック

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

Blocklyに最初から組み込まれているブロックが沢山あります。
今回はlogic_blocks.jsonに定義されているブロックについて説明します。
このファイルにはロジックを表現するブロックが定義されています。

controls_if

controls_ifはif文を表現するブロックです。
このブロックには一つの入力端子が存在し、この端子に入れたブロックの内容がif文の判定式に使用されます。
何も設定されなかった場合は「false」が追加されます。
また、このブロックには内部アクション接続端子が存在し、この端子に接続したアクションブロックがif文が真の時に実行されるようにコードが生成されます。

controls_ifの定義

  {
    "type": "controls_if",
    "message0": "if %1 do %2",
    "args0": [
      {
        "type": "input_value",
        "name": "IF0",
        "check": "Boolean"
      },
      {
        "type": "input_statement",
        "name": "DO0"
      }
    ],
    "previousStatement": null,
    "nextStatement": null,
    "colour": 210,
    "mutator": "controls_if_mutator",
    "tooltip": "If a value is true, then do some statements."
  }

controls_ifの生成コード


    if([入力端子] ){
        [内部アクションブロック]
    }

controls_ifelse

controls_ifelseはif-else文を表現するブロックです。
このブロックには一つの入力端子が存在し、この端子に入れたブロックの内容がif-else文の判定式に使用されます。
何も設定されなかった場合は「false」が追加されます。
また、このブロックには内部アクション接続端子が2つ存在し、最初の端子に接続したアクションブロックがif文が真の時に実行され、2つ目の端子に接続したアクションブロックはelse文が実行されるようにコードが生成されます。

controls_ifelseの定義

  {
    "type": "controls_ifelse",
    "message0": "if %1",
    "args0": [
      {
        "type": "input_value",
        "name": "IF0",
        "check": "Boolean"
      }
    ],
    "message1": "do %1",
    "args1": [
      {
        "type": "input_statement",
        "name": "DO0"
      }
    ],
    "message2": "else %1",
    "args2": [
      {
        "type": "input_statement",
        "name": "ELSE"
      }
    ],
    "previousStatement": null,
    "nextStatement": null,
    "colour": 210,
    "tooltip": "If a value is true, then do the first block of statements. Otherwise, do the second block of statements.",
    "helpUrl": "https://github.com/google/blockly/wiki/IfElse"
  }

controls_ifelseの生成コード


    if([入力端子] ){
        [1つ目の内部アクションブロック]
    } else {
        [2つ目の内部アクションブロック]
    }

logic_compare

logic_compareは2つのブロックを比較するブロックです。
このブロックには2つの入力端子が存在し、この2つの端子に接続したブロックの値を比較するコードが生成されます。
また、このブロックにはセレクトボックスがあり、このセレクボックスで値の一致または不一致のどちらで比較するかを決めることができます。

logic_compareの定義

  {
    "type": "logic_compare",
    "message0": "%1 %2 %3",
    "args0": [
      {
        "type": "input_value",
        "name": "A"
      },
      {
        "type": "field_dropdown",
        "name": "OP",
        "options": [
          [
            "=",
            "EQ"
          ],
          [
            "\u2260",
            "NEQ"
          ]
        ]
      },
      {
        "type": "input_value",
        "name": "B"
      }
    ],
    "inputsInline": true,
    "output": "Boolean",
    "colour": 210,
    "tooltip": "",
    "helpUrl": "https://en.wikipedia.org/wiki/Equality_(mathematics)"
  }

logic_compareの生成コード


    // セレクトボックスで「=」を選択
    [1つ目の入力端子] == [2つ目の入力端子]
    // セレクトボックスで「≠」を選択
    [1つ目の入力端子] != [2つ目の入力端子]
    

logic_operation

logic_operationは2つのブロックを論理演算をするブロックです。
このブロックには2つの入力端子が存在し、この2つの端子に接続したブロックの値・式に対して論理演算を行うコードが生成されます。
また、このブロックにはセレクトボックスがあり、このセレクボックスで値のAND演算・OR演算のどちらで演算するかを決めることができます。

logic_operationの定義

  {
    "type": "logic_operation",
    "message0": "%1 %2 %3",
    "args0": [
      {
        "type": "input_value",
        "name": "A"
      },
      {
        "type": "field_dropdown",
        "name": "OP",
        "options": [
          [
            "and",
            "AND"
          ],
          [
            "or",
            "OR"
          ]
        ]
      },
      {
        "type": "input_value",
        "name": "B"
      }
    ],
    "inputsInline": true,
    "output": "Boolean",
    "colour": 210,
    "tooltip": "",
    "helpUrl": "https://github.com/google/blockly/wiki/Logic#logical-operations"
  }

logic_operationの生成コード


    // セレクトボックスで「and」を選択
    [1つ目の入力端子] && [2つ目の入力端子]
    // セレクトボックスで「or」を選択
    [1つ目の入力端子] || [2つ目の入力端子]
    

logic_negate

logic_negateは真偽値の反転を表すブロックです。
このブロックには1つの入力端子が存在し、この端子に接続したブロックの値・式の真偽値を反転するコードが生成されます。

logic_negateの定義

  {
    "type": "logic_negate",
    "message0": "not %1",
    "args0": [
      {
        "type": "input_value",
        "name": "BOOL",
        "check": "Boolean"
      }
    ],
    "output": "Boolean",
    "colour": 210,
    "tooltip": "Returns true if the input is false. Returns false if the input is true.",
    "helpUrl": "https://github.com/google/blockly/wiki/Logic#not"
  }

logic_negateの生成コード

    ![1つ目の入力端子]

logic_boolean

logic_booleanは真偽値を表すブロックです。
このブロックには1つのセレクトボックスが存在し、このセレクトボックスでtrue・falseを選択することができます。
また、このブロックには1つの出力端子が存在し、セレクボックスで選択した値が出力されます。

logic_booleanの定義

  {
    "type": "logic_boolean",
    "message0": "%1",
    "args0": [
      {
        "type": "field_dropdown",
        "name": "BOOL",
        "options": [
          [
            "true",
            "TRUE"
          ],
          [
            "false",
            "FALSE"
          ]
        ]
      }
    ],
    "output": "Boolean",
    "colour": 210,
    "tooltip": "Returns either true or false.",
    "helpUrl": "https://github.com/google/blockly/wiki/Logic#values"
  }

logic_booleanの生成コード


    // セレクボックスでtrueを選択
    [出力端子] = true;
    // セレクボックスでfalseを選択
    [出力端子] = false;

logic_null

logic_nullはnullを表すブロックです。
このブロックには1つの出力端子が存在し、nullが出力されます。

logic_nullの定義

  {
    "type": "logic_null",
    "message0": "null",
    "output": null,
    "colour": 210,
    "tooltip": "Returns null.",
    "helpUrl": "https://en.wikipedia.org/wiki/Nullable_type"
  }

logic_nullの生成コード


    [出力端子] = null;

の定義

の生成コード

logic_ternaryは三項演算子を表すブロックです。
このブロックには3つの入力端子が存在します。
1つ目の入力端子には真偽値を入力します、trueの場合は2つ目の入力端子の値を出力します。
また、falseの場合は3つ目の入力端子の値を出力します。
  {
    "type": "logic_ternary",
    "message0": "test %1 if true %2 if false %3",
    "args0": [
      {
        "type": "input_value",
        "name": "IF"
      },
      {
        "type": "input_value",
        "name": "THEN"
      },
      {
        "type": "input_value",
        "name": "ELSE"
      }
    ],
    "output": null,
    "colour": 210,
    "tooltip": "Check the condition in \"test\". If the condition is true, returns the \"if true\" value; otherwise returns the \"if false\" value.",
    "helpUrl": "https://en.wikipedia.org/wiki/%3F:",
    "TODO(#374)": "https://github.com/google/blockly-android/issues/374"
  }

    [出力端子] = [1つ目の入力端子] ? [2つ目の入力端子] : [3つ目の入力端子];