ब्लॉक की बनावट

इस दस्तावेज़ में, ब्लॉक के अलग-अलग हिस्सों के बारे में बताया गया है.

कनेक्शन

कनेक्शन से यह तय होता है कि ब्लॉक कहां कनेक्ट हो सकते हैं और वे किस तरह के ब्लॉक से कनेक्ट हो सकते हैं.

कनेक्शन चार तरह के होते हैं:

कनेक्शन किस तरह का है इमेज
आउटपुट कनेक्शन आउटपुट कनेक्शन
इनपुट कनेक्शन इनपुट कनेक्शन
पिछला कनेक्शन पिछला कनेक्शन
अगला कनेक्शन अगला कनेक्शन

आउटपुट कनेक्शन और इनपुट कनेक्शन एक-दूसरे से कनेक्ट हो सकते हैं. साथ ही, अगले कनेक्शन और पिछले कनेक्शन एक-दूसरे से कनेक्ट हो सकते हैं. कनेक्शन की जांच करके, कनेक्शन को और भी ज़्यादा सीमित किया जा सकता है.

कस्टम रेंडरर का इस्तेमाल करके, कनेक्शन के आकार को पसंद के मुताबिक बनाया जा सकता है.

टॉप-लेवल कनेक्शन

ब्लॉक में तीन कनेक्शन होते हैं. इनका इस्तेमाल करना ज़रूरी नहीं है.

किसी ब्लॉक में एक आउटपुट कनेक्शन हो सकता है. इसे ब्लॉक के आगे के हिस्से पर, मेल जिग्सॉ कनेक्टर के तौर पर दिखाया जाता है. आउटपुट कनेक्शन, किसी ब्लॉक की वैल्यू (एक्सप्रेशन) को दूसरे ब्लॉक में पास करता है. आउटपुट कनेक्शन वाले ब्लॉक को वैल्यू ब्लॉक कहा जाता है.

math_number ब्लॉक.

किसी ब्लॉक के ऊपर की ओर पिछला कनेक्शन (नॉच के तौर पर दिखाया गया है) और नीचे की ओर अगला कनेक्शन (टैब के तौर पर दिखाया गया है) हो सकता है. इनकी मदद से, ब्लॉक को वर्टिकल तौर पर स्टैक किया जा सकता है. इससे स्टेटमेंट के क्रम का पता चलता है. आउटपुट कनेक्शन के बिना ब्लॉक को स्टेटमेंट ब्लॉक कहा जाता है. इसमें आम तौर पर, पिछले और अगले, दोनों कनेक्शन होते हैं.

variables_set
ब्लॉक.

ज़्यादा जानकारी के लिए, टॉप-लेवल कनेक्शन देखें.

फ़ील्ड

फ़ील्ड, ब्लॉक में मौजूद ज़्यादातर यूज़र इंटरफ़ेस (यूआई) एलिमेंट तय करते हैं. इनमें स्ट्रिंग लेबल, ड्रॉपडाउन, चेकबॉक्स, इमेज, और लिटरल डेटा के लिए इनपुट शामिल हैं. जैसे, स्ट्रिंग और संख्याएं. उदाहरण के लिए, यह लूप ब्लॉक, लेबल फ़ील्ड, ड्रॉपडाउन फ़ील्ड, और नंबर फ़ील्ड का इस्तेमाल करता है.

एक से ज़्यादा फ़ील्ड वाला ब्लॉक.

Blockly में कई बिल्ट-इन फ़ील्ड उपलब्ध हैं. इनमें टेक्स्ट इनपुट, कलर पिकर, और इमेज शामिल हैं. आपके पास अपने फ़ील्ड बनाने का विकल्प भी है.

ज़्यादा जानकारी के लिए, फ़ील्ड देखें.

इनपुट

इनपुट, फ़ील्ड और कनेक्शन के लिए कंटेनर होते हैं. किसी ब्लॉक को इस तरह बनाया जाता है कि उसके इनपुट, ईंटों की तरह एक या एक से ज़्यादा लाइनों में रेंडर किए जाते हैं.

इनपुट चार तरह के होते हैं. इन सभी में फ़ील्ड (लेबल भी शामिल हैं) हो सकते हैं. इनमें से दो में एक कनेक्शन होता है. आपके पास कस्टम इनपुट बनाने का विकल्प भी है. ये कस्टम रेंडरिंग के साथ काम करते हैं.

इनपुट प्रकार कनेक्शन किस तरह का है इमेज
डमी इनपुट कोई नहीं डमी इनपुट
लाइन के आखिर में मौजूद इनपुट कोई नहीं लाइन के आखिर में मौजूद इनपुट
वैल्यू इनपुट इनपुट कनेक्शन वैल्यू इनपुट
स्टेटमेंट इनपुट अगला कनेक्शन स्टेटमेंट इनपुट

हम इन इनपुट के बारे में, उदाहरणों की मदद से बताएंगे. किसी ब्लॉक को बनाने वाले इनपुट, कनेक्शन, और फ़ील्ड तय करने के बारे में जानकारी पाने के लिए, JSON में ब्लॉक का स्ट्रक्चर और JavaScript में ब्लॉक का स्ट्रक्चर देखें.

डमी इनपुट

डमी इनपुट, सिर्फ़ फ़ील्ड के लिए एक कंटेनर होता है. इसका कोई कनेक्शन नहीं होता. उदाहरण के लिए, यहां दिए गए नंबर ब्लॉक में एक डमी इनपुट है. इसमें एक नंबर फ़ील्ड शामिल है.

डमी इनपुट और नंबर फ़ील्ड वाला नंबर ब्लॉक.

ज़्यादा मुश्किल उदाहरण के तौर पर, ऐसे ब्लॉक के बारे में सोचें जो दो संख्याओं को एक साथ जोड़ता है. इसे तीन फ़ील्ड (संख्या, लेबल, संख्या) वाले एक डमी इनपुट से बनाया जा सकता है:

तीन फ़ील्ड वाले डमी इनपुट से बनाया गया जोड़ का ब्लॉक.

या तीन डमी इनपुट, जिनमें से हर एक में एक फ़ील्ड हो:

तीन डमी इनपुट से बनाया गया एक एडिशन ब्लॉक. हर इनपुट में एक फ़ील्ड होता है.

लाइन के आखिर में जोड़े गए इनपुट

Blockly, अनुमानित अनुभव के आधार पर यह तय करता है कि सभी इनपुट को एक ही लाइन में रेंडर करना है या हर इनपुट को उसकी लाइन में रेंडर करना है. अगर आपको यह पक्का करना है कि कोई इनपुट नई लाइन से शुरू हो, तो पिछले इनपुट के तौर पर end-of-row input का इस्तेमाल करें.

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

लाइन के आखिर में इनपुट देने पर, जोड़ का ब्लॉक दो लाइनों में बंट जाता है.

वैल्यू इनपुट

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

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

दो वैल्यू इनपुट वाला जोड़ ब्लॉक.

स्टेटमेंट के लिए इनपुट

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

यह एक दोहराया गया ब्लॉक है, जिसमें दोहराए गए स्टेटमेंट को नेस्ट करने के लिए स्टेटमेंट इनपुट किया जाता है.

स्टेटमेंट के इनपुट हमेशा अपनी लाइन में रेंडर किए जाते हैं. इसे यहां दिए गए if-then-else ब्लॉक में देखा जा सकता है. इसकी पहली लाइन में वैल्यू इनपुट है और अगली दो लाइनों में स्टेटमेंट इनपुट हैं.

'अगर-तो-वरना' ब्लॉक, जिसमें 'तो' और 'वरना' स्टेटमेंट के लिए अलग-अलग स्टेटमेंट इनपुट होते हैं.

इनलाइन इनपुट बनाम बाहरी इनपुट

इनपुट को इनलाइन या बाहरी तौर पर रेंडर किया जा सकता है. इससे यह कंट्रोल किया जाता है कि वैल्यू इनपुट के लिए कनेक्टर, ब्लॉक में (इनलाइन) रेंडर किए जाएं या बाहरी किनारे पर (एक्सटर्नल). साथ ही, इससे यह भी कंट्रोल किया जाता है कि इनपुट एक ही लाइन में रेंडर किए जाएं या अलग-अलग लाइनों में.

एक ही ब्लॉक को दो बार रेंडर किया गया है. पहली बार इनलाइन इनपुट के साथ और दूसरी बार बाहरी इनपुट के साथ.

कस्टम ब्लॉक बनाते समय, यह तय किया जा सकता है कि किस ब्लॉक का इस्तेमाल करना है. इसके अलावा, Blockly को भी यह फ़ैसला लेने दिया जा सकता है. ज़्यादा जानकारी के लिए, इनलाइन वर्सेस बाहरी इनपुट लेख पढ़ें.

अब खेलें!

इनपुट, फ़ील्ड, और कनेक्शन के बारे में जानने का सबसे अच्छा तरीका यह है कि Blockly Developer Tools में ब्लॉक बनाएं. इसके बाद, inputs ड्रॉपडाउन (automatic, external, inline) के लिए अलग-अलग सेटिंग चुनें.

आइकॉन

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

टिप्पणी वाले आइकॉन और टिप्पणी के खुले हुए एडिटर वाला ब्लॉक.

ज़्यादा जानकारी के लिए, Icons देखें.

ब्लॉक और JavaScript ऑब्जेक्ट

ब्लॉक, इनपुट, कनेक्शन, फ़ील्ड, और आइकॉन, सभी JavaScript ऑब्जेक्ट होते हैं.

Blockly कॉम्पोनेंट बेस क्लास सबक्लास
ब्लॉक करें Block BlockSvg
इनपुट Input DummyInput
EndRowInput
ValueInput
StatementInput
कस्टम इनपुट
कनेक्शन Connection RenderedConnection
फ़ील्ड Field FieldTextInput
FieldNumber
FieldLabel
कस्टम फ़ील्ड
वगैरह
आइकॉन Icon CommentIcon
MutatorIcon
WarningIcon
कस्टम आइकॉन

ब्लॉक में मौजूद ऑब्जेक्ट, पेड़ के आकार का ऑब्जेक्ट बनाते हैं. ब्लॉक के ग्राफ़िकल प्रज़ेंटेशन का इस ट्री से क्या संबंध है, यह समझना तब मददगार होता है, जब आपको प्रोग्राम के हिसाब से ब्लॉक में बदलाव करने के लिए कोड लिखना हो. उदाहरण के लिए, controls_for ब्लॉक:

वैरिएबल फ़ील्ड वाला लूप ब्लॉक. इसमें 'से', 'तक', और 'इतने से' के लिए वैल्यू इनपुट दिए गए हैं. साथ ही, बार-बार इस्तेमाल होने वाले स्टेटमेंट के लिए स्टेटमेंट इनपुट दिया गया है.

यह JavaScript ऑब्जेक्ट के इस ट्री से मेल खाता है.

// <Object> means an instance of an Object.
{                                   // Block
  nextConnection: <Connection>,     // ConnectionType NEXT_STATEMENT
  outputConnection: null,
  previousConnection: <Connection>, // ConnectionType PREVIOUS_STATEMENT
  inputList: [                      // Array of Inputs in block
    {                               // ValueInput
      connection: <Connection>,     // ConnectionType INPUT_VALUE
      fieldRow: [                   // Array of fields in Input
        <FieldLabel>,               // 'count with'
        <FieldVariable>,            // i
        <FieldLabel>,               // 'from'
      ],
    },
    {                               // ValueInput
      connection: <Connection>,     // ConnectionType INPUT_VALUE
      fieldRow: [
        <FieldLabel>,               // 'to'
      ],
    },
    {                               // ValueInput
      connection: <Connection>,     // ConnectionType INPUT_VALUE
      fieldRow: [
        <FieldLabel>,               // 'by'
      ],
    },
    {                               // StatementInput
      connection: <Connection>,     // ConnectionType NEXT_STATEMENT
      fieldRow: [
        <FieldLabel>,               // 'do'
      ],
    },
  ]
}