ब्लॉक पर आधारित भाषाएं, टेक्स्ट पर आधारित भाषाओं से कई तरह से अलग होती हैं. ऐसा इसलिए है, क्योंकि इन्हें नए उपयोगकर्ताओं के लिए डिज़ाइन किया गया है. ब्लॉक पर आधारित अपनी भाषा डिज़ाइन करते समय, इन बातों का ध्यान रखें.
एक-आधार वाली सूचियों का इस्तेमाल करना
जब नए प्रोग्रामर को पहली बार शून्य से शुरू होने वाली सूचियां दिखती हैं, तो वे इनका इस्तेमाल नहीं करना चाहते. इस वजह से, Blockly, Lua और Lambda Moo की तरह ही सूची और स्ट्रिंग को एक-आधारित इंडेक्स करता है.
Blockly के ज़्यादा बेहतर इस्तेमाल के लिए, शून्य से शुरू होने वाली सूचियों का इस्तेमाल किया जा सकता है. इससे, टेक्स्ट में ट्रांज़िशन करना आसान हो जाता है. कम उम्र या नए दर्शकों के लिए, अब भी एक-आधार पर इंडेक्स करने का सुझाव दिया जाता है.
सुझाव: एक पहला नंबर है.
नाम रखने के लिए ज़्यादा सुविधाएं देना
नए प्रोग्रामर को यह नहीं पता होता कि location_X
और location_x
अलग-अलग वैरिएबल हैं. इसलिए, Blockly, वैरिएबल और फ़ंक्शन को केस-इनसेंसिटिव बनाकर, BASIC और एचटीएमएल की तरह काम करता है. Scratch, दाईं ओर दिखाए गए तरीके का इस्तेमाल करता है. यह वैरिएबल के नामों के लिए केस-सेंसिटिव होता है, लेकिन बराबरी की जांच के लिए नहीं.
साथ ही, Blockly में वैरिएबल और फ़ंक्शन के लिए, [_A-Za-z][_A-Za-z0-9]*
स्कीम का इस्तेमाल करना ज़रूरी नहीं है. अगर किसी को किसी वैरिएबल का नाम List
of zip codes
या רשימת מיקודים
रखना है, तो यह पूरी तरह से सही है.
सुझाव: केस को अनदेखा करें और किसी भी नाम को अनुमति दें.
सभी वैरिएबल को ग्लोबल बनाना
नए प्रोग्रामर को भी स्कोप समझने में मुश्किल होती है. इसलिए, Blockly में सभी वैरिएबल को ग्लोबल बनाया जाता है, जैसा कि Scratch में किया जाता है. ग्लोबल वैरिएबल का एक ही नुकसान है कि बार-बार इस्तेमाल करने पर, वैरिएबल को फिर से सेट करना मुश्किल हो जाता है. इसके लिए, वैरिएबल को सूची में डालना और फिर से बाहर निकालना पड़ता है. हालांकि, यह प्रोग्रामिंग की एक ऐसी तकनीक है जो Blockly के टारगेट उपयोगकर्ताओं के दायरे से बाहर है.
सुझाव: यह दायरे से बाहर है. इसे बाद के लिए छोड़ दें.
वैकल्पिक रिटर्न वैल्यू को मैनेज करने का तरीका जानें
टेक्स्ट-आधारित प्रोग्रामिंग में कई फ़ंक्शन, कोई कार्रवाई करते हैं और फिर कोई वैल्यू दिखाते हैं.
रिटर्न की इस वैल्यू का इस्तेमाल किया जा सकता है या नहीं. इसका एक उदाहरण, स्टैक का pop()
फ़ंक्शन है. आखिरी एलिमेंट को पाने और हटाने के लिए, Pop फ़ंक्शन को कॉल किया जा सकता है. इसके अलावा, आखिरी एलिमेंट को हटाने के लिए भी इसे कॉल किया जा सकता है. हालांकि, इस स्थिति में रिटर्न वैल्यू को अनदेखा कर दिया जाता है.
var last = stack.pop(); // Get and remove last element.
stack.pop(); // Just remove last element.
ब्लॉक पर आधारित भाषाएं, आम तौर पर रिटर्न वैल्यू को अनदेखा करने में अच्छी नहीं होती हैं. वैल्यू ब्लॉक को किसी ऐसे ब्लॉक में प्लग करना होगा जो वैल्यू स्वीकार करता हो. इस समस्या को हल करने के लिए कई तरीकों का इस्तेमाल किया जा सकता है.
a) समस्या को हल करने के लिए, कोई दूसरा तरीका अपनाएं. ब्लॉक पर आधारित ज़्यादातर भाषाओं को इन मामलों से बचने के लिए डिज़ाइन किया गया है. उदाहरण के लिए, Scratch में ऐसा कोई ब्लॉक नहीं है जिसमें साइड इफ़ेक्ट और रिटर्न वैल्यू, दोनों हों.
b) दो ब्लॉक दें. अगर टूलबॉक्स में जगह की कोई समस्या नहीं है, तो इसका एक आसान तरीका है कि इस तरह के हर ब्लॉक के दो वर्शन बनाए जाएं. एक वर्शन में रिटर्न वैल्यू के साथ और दूसरे में बिना रिटर्न वैल्यू के. इसका नुकसान यह है कि इससे टूलबॉक्स में एक जैसे कई ब्लॉक हो सकते हैं, जो आपस में भ्रमित कर सकते हैं.
c) एक ब्लॉक में बदलाव करें. ड्रॉपडाउन, चेकबॉक्स या किसी अन्य कंट्रोल का इस्तेमाल करें, ताकि उपयोगकर्ता यह चुन सके कि रिटर्न वैल्यू है या नहीं. इसके बाद, ब्लॉक के विकल्पों के आधार पर उसका आकार बदल जाता है. इसका उदाहरण, Blockly के सूची ऐक्सेस ब्लॉक में देखा जा सकता है.
d) वैल्यू का इस्तेमाल करें. App Inventor के पहले वर्शन में, एक खास पाइप ब्लॉक बनाया गया था, जो कनेक्ट की गई किसी भी वैल्यू को खा जाता था. उपयोगकर्ताओं को इसका कॉन्सेप्ट समझ नहीं आया. इसलिए, App Inventor के दूसरे वर्शन में पाइप ब्लॉक को हटा दिया गया. इसके बजाय, उपयोगकर्ताओं को सुझाव दिया गया कि वे वैल्यू को किसी ऐसे वैरिएबल को असाइन करें जिसका इस्तेमाल सिर्फ़ एक बार किया जाता है.
सुझाव: हर रणनीति के अपने फ़ायदे और नुकसान होते हैं. इसलिए, अपने उपयोगकर्ताओं के लिए सही विकल्प चुनें.
पढ़ने लायक कोड जनरेट करना
Advanced Blockly के उपयोगकर्ता, जनरेट किए गए कोड (JavaScript, Python, PHP, Lua, Dart वगैरह) को देखकर, तुरंत अपने लिखे गए प्रोग्राम को पहचान सकते हैं. इसका मतलब है कि मशीन से जनरेट किए गए इस कोड को पढ़ने लायक बनाए रखने के लिए, ज़्यादा मेहनत करनी पड़ती है. ग़ैर-ज़रूरी ब्रैकेट, अंकों वाले वैरिएबल, ज़्यादा खाली जगह, और ज़्यादा शब्दों वाले कोड टेंप्लेट, बेहतर कोड बनाने में रुकावट डालते हैं. जनरेट किए गए कोड में टिप्पणियां शामिल होनी चाहिए और यह Google की स्टाइल गाइड के मुताबिक होना चाहिए.
सुझाव: जनरेट किए गए कोड पर गर्व करें. उपयोगकर्ता को दिखाएं.
भाषाओं के बीच के अंतर को स्वीकार करना
आसान कोड बनाने की कोशिश का एक साइड इफ़ेक्ट यह है कि Blockly के काम करने का तरीका, क्रॉस-कंपाइल की गई भाषा के काम करने के तरीके के हिसाब से तय होता है. आउटपुट के लिए सबसे ज़्यादा इस्तेमाल की जाने वाली भाषा JavaScript है. हालांकि, अगर Blockly को किसी दूसरी भाषा में क्रॉस-कंपाइल करना है, तो दोनों भाषाओं में एक जैसा व्यवहार बनाए रखने के लिए, गलत तरीके से कोशिश नहीं की जानी चाहिए. उदाहरण के लिए, JavaScript में कोई खाली स्ट्रिंग, गलत होती है, जबकि Lua में वह सही होती है. टारगेट की भाषा के बावजूद, Blockly के कोड को चलाने के लिए, व्यवहार का एक पैटर्न तय करने पर, ऐसा कोड बन जाएगा जिसे मैनेज नहीं किया जा सकेगा. ऐसा कोड GWT कंपाइलर से निकला हुआ लगता है.
सुझाव: Blockly कोई भाषा नहीं है. इसलिए, मौजूदा भाषा के हिसाब से व्यवहार तय करें.