वैरिएबल

वैरिएबल, प्रोग्रामिंग का एक अहम सिद्धांत है. Blockly, डाइनैमिक तरीके से काम करता है Python और JavaScript जैसी टाइप की गई भाषाएं और थोड़े अतिरिक्त काम के साथ, आप निश्चित टाइप की गई भाषाओं (या स्टैटिक टाइप की गई) की सहायता के लिए जानकारी जोड़ सकता है भाषाएँ) जैसे Java या C.

यहां ज़्यादा जानकारी दी गई है डाइनैमिक बनाम स्टैटिक टाइप की गई भाषाओं के बारे में जानकारी.

ब्लॉकली, वैरिएबल फ़ील्ड को दिखाता है. ये ऐसे वैरिएबल फ़ील्ड होते हैं जो दिखने वाले डाइनैमिक ड्रॉपडाउन बॉक्स होते हैं उपयोगकर्ता के उपलब्ध कराए गए वैरिएबल के नाम. नीचे एक उदाहरण दिया गया है.

डिफ़ॉल्ट रूप से, 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);
    ...
  }
};

इससे ये दो ब्लॉक बन जाते हैं:

वैरिएबल गेटर के "आउटपुट" को सेट करने से यह ध्यान देने वाली एक महत्वपूर्ण बात है शून्य के लिए, रिटर्न वैल्यू किसी भी तरह की हो सकती है. साथ ही, ध्यान दें कि चर सेटर का इनपुट किसी भी जांच के बारे में नहीं बताता है. इस वजह से, वैरिएबल को सेट किया जा सकता है का इस्तेमाल कर सकते हैं.

टाइप किए गए वैरिएबल ब्लॉक

आपके पास ऐसे गैटर और सेटर जोड़ने का विकल्प होता है जो टाइप चेकिंग की सुविधा लागू करते हैं. उदाहरण के लिए, अगर ने "Panda" टाइप का एक वैरिएबल बनाया है, तो नीचे दी गई परिभाषाएं एक सही तरह के गेटर और सेटर.

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

यह दो तरह के ब्लॉक बनाता है, गैटर और सेटर. सिर्फ़ उनके ड्रॉपडाउन पांडा टाइप के डिसप्ले वैरिएबल. उनके इनपुट और आउटपुट सिर्फ़ पांडा टाइप के साथ कनेक्शन. फ़ील्ड के defaultType को एक पर सेट होना चाहिए वैल्यू की मदद से, variableTypes अरे में से किसी एक वैल्यू को चुनें. इस समय defaultType सेट नहीं किया जा रहा है variableTypes कलेक्शन देने से गड़बड़ी होगी.

डिफ़ॉल्ट रूप से कोई विज़ुअल इंडिकेटर नहीं होता, जिससे उपयोगकर्ता को यह पता चल सके कि किस टाइप की इमेज इस्तेमाल किया गया. वैरिएबल टाइप में अंतर करने का एक आसान तरीका है, रंग.

टूलबॉक्स में वैरिएबल जोड़ें

इस नए टाइप के वैरिएबल को अपने उपयोगकर्ताओं के लिए काम का बनाने के लिए, आपको नए वैरिएबल बना सकते हैं और उनका इस्तेमाल कर सकते हैं.

एक नई डाइनैमिक कैटगरी बनाएं का इस्तेमाल करें.

कैटगरी में अपने नए गैटर और सेटर जोड़ें.

वैरिएबल बनाने का बटन

इसके बाद, आपके उपयोगकर्ता को वैरिएबल बनाने का तरीका चाहिए. सबसे आसान तरीका है कि "वैरिएबल बनाएं" बटन पर टैप करें.

बटन बनाते समय, कॉलबैक कॉल करें

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

और पांडा टाइप किया गया एक वैरिएबल बन जाएगा!

उपयोगकर्ताओं को एक से ज़्यादा टाइप के वैरिएबल बनाने की अनुमति देने का सबसे आसान तरीका यह है कि पहला "बनाओ" हर टाइप के लिए बटन (उदाहरण, स्ट्रिंग वैरिएबल बनाना, नंबर बनाना वैरिएबल, पांडा वैरिएबल बनाएं).

अगर आपके पास दो या तीन से ज़्यादा वैरिएबल टाइप हैं, तो आपकी वेबसाइट पर बहुत सारे बटन हैं. ऐसी स्थिति में, @blockly/plugin-typed-variable-modal का इस्तेमाल करके पॉप-अप दिखाया जा सकता है. इससे उपयोगकर्ता अपनी पसंद का वैरिएबल टाइप चुन सकते हैं.

जनरेटर तय करें

आखिर में, आपको ब्लॉक-कोड जनरेटर तय करना होगा अपने नए वैरिएबल ब्लॉक के लिए. वैरिएबल की सूची को सीधे भी ऐक्सेस किया जा सकता है के साथ Blockly.Workspace.getAllVariables() का इस्तेमाल करें और सभी टाइप के सभी वैरिएबल पाएं या किसी खास टाइप के सभी वैरिएबल पाने के लिए, Blockly.Workspace.getVariablesOfType() का इस्तेमाल करें.