पिछले कुछ सालों में, Blockly और Blockly Games की टीम ने काफ़ी कुछ सीखा है जो नए ब्लॉक बनाने वाले लोगों पर लागू होते हैं. ये हैं: या आम तौर पर दूसरों से होने वाली गलतियां.
ये कुछ सामान्य लेसन हैं, जिन्हें हमने Blockly के विज़ुअल स्टाइल का इस्तेमाल करके और यह ज़रूरी नहीं है कि यह इस्तेमाल के सभी उदाहरणों या डिज़ाइन पर लागू हो. इसके अलावा, अन्य तरीके भी हैं. यह है साथ ही, इसमें उन समस्याओं की पूरी सूची नहीं दी गई है जिनका सामना लोगों को करना पड़ सकता है. साथ ही, उनसे बचने के तरीके भी बताए गए हैं उन्हें. हर केस थोड़ा अलग होता है और इसकी अपनी-अपनी कानूनी शर्तें होती हैं.
1. कंडिशनल बनाम लूप
नए उपयोगकर्ताओं के लिए कंडिशनल और लूप वाले ब्लॉक सबसे मुश्किल हैं. कई ब्लॉक-आधारित एनवायरमेंट इन दोनों ब्लॉक को एक ही 'कंट्रोल' में ग्रुप कर देते हैं श्रेणी में डालें, जिसमें दोनों ब्लॉक एक जैसे आकार और रंग में हों. इससे अक्सर निराशा होती है क्योंकि नए उपयोगकर्ता दो ब्लॉक को भ्रमित कर देते हैं. शर्तों और लूप को अलग-अलग 'तर्क' में ले जाने का सुझाव और 'लूप' अलग-अलग रंग वाली कैटगरी. इससे यह साफ़ तौर पर पता चलता है कि ये अलग-अलग आइडिया हैं, जो एक जैसे आकार होने के बावजूद, अलग तरह से काम करते हैं.
सुझाव: कंडिशनल और लूप को अलग-अलग रखें.
2. एक-आधारित सूचियां
पहली बार शून्य-आधारित सूचियों का सामना करने पर नौसिखिया प्रोग्रामर खराब प्रतिक्रिया देते हैं समय. इस वजह से, ब्लॉकली ने सूची बनाकर लुआ और लैम्डा मू के लीडर को फ़ॉलो किया और स्ट्रिंग एक-आधारित इंडेक्स कर रहे हैं.
Blockly के बेहतर इस्तेमाल के लिए, शून्य-आधारित सूचियों का इस्तेमाल किया जा सकता है टेक्स्ट पर स्विच करने में मदद करता है. नई ऑडियंस के लिए या कम उम्र के दर्शकों के लिए हमारा सुझाव है कि एक आधार पर इंडेक्स करने की सुविधा का अब भी सुझाव दिया जाता है.
सुझाव: पहला नंबर.
3. उपयोगकर्ता के इनपुट
उपयोगकर्ता से पैरामीटर पाने के तीन तरीके हैं. ड्रॉपडाउन आपके सबसे ज़्यादा पाबंदी वाली होती है. साथ ही, आसान ट्यूटोरियल और अभ्यासों के लिए अच्छी है. इनपुट फ़ील्ड इससे ज़्यादा आज़ादी मिलती है और यह ज़्यादा क्रिएटिव गतिविधियों के लिए सही है. वैल्यू ब्लॉक इनपुट (आम तौर पर शैडो ब्लॉक के साथ) किसी वैल्यू का हिसाब लगाने का विकल्प देता है (उदाहरण के लिए, एक रैंडम जनरेटर) का इस्तेमाल करना चाहिए.
सुझाव: इनपुट का वह तरीका चुनें जो आपके उपयोगकर्ताओं के लिए सही हो.
4. लाइव ब्लॉक इमेज
ब्लॉक के दस्तावेज़ में, उन ब्लॉक की इमेज शामिल होनी चाहिए जिनका रेफ़रंस दिया गया है से. स्क्रीनशॉट लेना आसान है. हालांकि, अगर ऐसी 50 इमेज हैं और ऐप्लिकेशन का 50 भाषाओं में अनुवाद किया गया, अचानक से एक ऐप्लिकेशन का अनुपात 2,500 हो गया स्टैटिक इमेज. इसके बाद, कलर स्कीम बदल जाती है और 2,500 इमेज अपडेट करने की ज़रूरत होती है -- फिर से.
रखरखाव के इस बुरे सपने से खुद को बचाने के लिए, Blockly Games की जगह ले ली गई है रीड ओनली मोड में Blockly के इंस्टेंस वाले सभी स्क्रीनशॉट. नतीजा दिखाई देता है, लेकिन इसके अप टू डेट होने की गारंटी है. रीड-ओनली से अंतर्राष्ट्रीयकरण संभव हो गया है.
सुझाव: अगर ऐप्लिकेशन को एक से ज़्यादा भाषाओं में इस्तेमाल किया जा सकता है, तो रीड ओनली मोड का इस्तेमाल करें.
5. बाईं ओर मौजूद आपका दूसरा
अमेरिका के बच्चों से मिले सुझाव, शिकायत या राय (हालांकि, दिलचस्प बात यह है कि दूसरे देशों के बच्चों से नहीं) तो बाईं और दाईं ओर के बीच बड़े पैमाने पर भ्रम की स्थिति पैदा हुई. इस समस्या को हल करने के लिए, जोड़ी गई रिपोर्ट. अगर दिशा सापेक्ष है (उदाहरण के लिए, किसी अवतार के) तीर की शैली महत्वपूर्ण है. A → सीधा तीर या ↱ टर्न ऐरो से भ्रम की स्थिति पैदा होती है जब अवतार का चेहरा उल्टी दिशा में हो. सबसे ज़्यादा मददगार ⟳ सर्कुलर है यह ऐसे मामलों में भी ऐरो का इस्तेमाल किया जा सकता है जहां बाईं ओर मुड़ा गया कोण, ऐरो के निशान से छोटा होता है.
सुझाव: जहां हो सके वहां यूनिकोड आइकॉन के साथ टेक्स्ट जोड़ें.
6. हाई-लेवल ब्लॉक
जहां भी हो सके, ऊंचे स्तर का काम करना चाहिए. भले ही, इससे निष्पादन प्रदर्शन या वैकल्पिकता. इस Apps Script एक्सप्रेशन के बारे में सोचें:
SpreadsheetApp.getActiveSheet().getDataRange().getValues()
1:1 मैपिंग के तहत, जो सभी संभावित क्षमताओं को बनाए रखता है. एक्सप्रेशन को चार ब्लॉक का इस्तेमाल करके बनाया जाएगा. हालांकि, Blockly का मकसद है कि वह और एक ब्लॉक उपलब्ध कराएगा, जिसमें पूरा एक्सप्रेशन शामिल होगा. इसका मकसद है के लिए ऑप्टिमाइज़ किया जा सकता है. भले ही, बाकी के 5% मामले पहले से ज़्यादा मुश्किल हों. ब्लॉकली को टेक्स्ट आधारित भाषाओं की जगह इस्तेमाल करने के लिए नहीं बनाया गया है, बल्कि यह शुरुआती तौर पर सीखने में उपयोगकर्ताओं की मदद करने के लिए बनाया गया है, ताकि वे टेक्स्ट के हिसाब से भाषाएँ.
सुझाव: अपने पूरे एपीआई को ब्लॉक में न बदलें.
7. प्रॉडक्ट लौटाने की वैकल्पिक वैल्यू
टेक्स्ट पर आधारित प्रोग्रामिंग में कई फ़ंक्शन, कोई कार्रवाई करते हैं और फिर रिटर्न करते हैं
एक मान. इस रिटर्न वैल्यू का इस्तेमाल किया भी जा सकता है और नहीं भी. उदाहरण के लिए, स्टैक की
pop()
फ़ंक्शन का इस्तेमाल करना होगा. आखिरी एलिमेंट को पाने और हटाने के लिए, पॉप कॉल किया जा सकता है,
या फिर इसे रिटर्न वैल्यू वाले आखिरी एलिमेंट को हटाने के लिए कहा जा सकता है
अनदेखा किया जा रहा है.
var last = stack.pop(); // Get and remove last element. stack.pop(); // Just remove last element.
ब्लॉक-आधारित भाषाएं, आम तौर पर रिटर्न वैल्यू को अनदेखा करने में अच्छी नहीं होतीं. ऐप्लिकेशन वैल्यू ब्लॉक को किसी ऐसी चीज़ में प्लग इन करना होगा जो वैल्यू को स्वीकार करे. यहां हैं हमने इस समस्या से निपटने के लिए कई रणनीतियां तय की हैं.
a) समस्या को हल करें. ज़्यादातर ब्लॉक-आधारित भाषाएं उस भाषा को डिज़ाइन करती हैं ऐसा करने से बचें. उदाहरण के लिए, स्क्रैच में ऐसा कोई ब्लॉक नहीं है जिसमें दोनों खराब असर और रिटर्न वैल्यू होती है.
b) दो ब्लॉक उपलब्ध कराएं. अगर टूलबॉक्स में जगह नहीं दिख रही है, तो आसान समाधान यह है कि इस तरह के हर ब्लॉक में से दो दिए जाएं. एक के साथ और एक के साथ तय करें. नकारात्मकता यह है कि इससे भ्रम की स्थिति पैदा हो सकती है एक जैसे कई ब्लॉक वाला टूलबॉक्स.
c) एक ब्लॉक को म्यूट करें. ड्रॉपडाउन, चेकबॉक्स या अन्य कंट्रोल का इस्तेमाल करना उपयोगकर्ता से यह तय किया जा सकता है कि रिटर्न वैल्यू होगी या नहीं. द ब्लॉक फिर अपने विकल्पों के आधार पर आकार बदल जाता है. इसका एक उदाहरण यह हो सकता है: ब्लॉकली की सूची ऐक्सेस ब्लॉक में देखा जा सकता है.
d) कीमत तय करें. App Inventor के पहले वर्शन ने एक खास पाइप बनाया इससे कनेक्ट की गई कोई भी वैल्यू ब्लॉक हो जाएगी. उपयोगकर्ताओं को यह सिद्धांत समझ नहीं आया और App Inventor के दूसरे वर्शन ने पाइप ब्लॉक को निकाला और इसके बजाय यह सुझाव दिया जाता है कि उपयोगकर्ता सिर्फ़ थ्रॉअवे वैरिएबल के लिए वैल्यू असाइन करें.
सुझाव: हर रणनीति के अपने फ़ायदे और नुकसान हैं. चुनें कि क्या रणनीति सही है उपयोगकर्ता भी हैं.
8. ग्रोइंग ब्लॉक
कुछ ब्लॉक में, इनपुट के अलग-अलग नंबर डालने पड़ सकते हैं. उदाहरण के लिए: संख्याओं के आर्बिट्रेरी सेट को जोड़ने वाला ब्लॉक या if/elseif/else को जोड़ने वाला ब्लॉक के साथ ब्लॉक करें शुरू किए गए एलिमेंट की आर्बिट्रेरी संख्या. आपके पास सीएमएस की कई रणनीतियां होती हैं. हर चीज़ के अपने फ़ायदे और कमियां हैं.
a) सबसे आसान तरीका यह है कि उपयोगकर्ता, ब्लॉक को छोटे अक्षरों में से लिखें ब्लॉक. उदाहरण के लिए, दो संख्याओं को नेस्ट करना और तीन संख्याओं को जोड़ना जोड़ ब्लॉक न करें. दूसरा उदाहरण सिर्फ़ तब देना होगा, जब/और ब्लॉक हो, और उपयोगकर्ता को beforeif स्थितियां बनाने के लिए उन्हें नेस्ट करना.
इस तरीके का फ़ायदा यह है कि यह लोगों और पब्लिशर, दोनों के लिए आसानी से उपलब्ध है. डेवलपर) कहा जाता है. इसका नुकसान यह है कि बड़ी संख्या में की संख्या में नेस्ट करने के लिए, कोड को समझना बहुत मुश्किल हो जाता है. साथ ही, उपयोगकर्ता के लिए उसे इस्तेमाल करना मुश्किल हो जाता है पढ़ें और बनाए रखें.
b) इसका दूसरा विकल्प यह है कि ब्लॉक को डाइनैमिक तौर पर बड़ा किया जाए, ताकि वह हमेशा एक रहे फ़्री इनपुट शामिल करें. इसी तरह, अगर पिछला इनपुट मौजूद है, तो ब्लॉक उसे मिटा देता है दो मुफ़्त इनपुट डालें. इस तरह की चैट का पहला वर्शन ऐप्लिकेशन आविष्कारक का इस्तेमाल किया गया.
ऐसे ब्लॉक जो अपने-आप बढ़ने वाले ब्लॉक को, ऐप्लिकेशन इन्वेंटर के उपयोगकर्ताओं ने कुछ लोगों को नापसंद कर दिया कई वजहों से. पहला, हमें हमेशा मुफ़्त इनपुट मिलता था और इस प्रोग्राम को 'पूरा हो गया'. दूसरा, स्टैक के बीच में एक एलिमेंट शामिल करना था इससे परेशानी होती है, क्योंकि बदलाव के तहत विज्ञापन के नीचे मौजूद सभी चीज़ें डिसकनेक्ट हो जाती हैं और उन्हें फिर से कनेक्ट कर रहा हूँ. इसका मतलब यह है कि अगर क्रम महत्वपूर्ण नहीं है, और उपयोगकर्ता उनके प्रोग्राम में खुद से होने वाले छोटे-छोटे छेद होने से आरामदेह अनुभव मिलता है.
c) उस छेद की समस्या को हल करने के लिए, कुछ डेवलपर ब्लॉक करने के लिए +/- बटन जोड़ते हैं मैन्युअल तरीके से इनपुट जोड़ें या हटाएं. ओपन रोबर्टा जोड़ने के लिए ऐसे दो बटन का इस्तेमाल करती है या नीचे से इनपुट हटाएं. अन्य डेवलपर हर डिवाइस पर दो बटन जोड़ते हैं पंक्ति सेट करें ताकि स्टैक के बीच से शामिल किया जा सके और हटाया जा सके शामिल हैं. अन्य पंक्तियां प्रत्येक पंक्ति में दो अप/डाउन बटन जोड़ती हैं, ताकि स्टैक को शामिल किया जा सकता है.
इस रणनीति के तहत, विकल्पों की तय सीमा के तहत, हर ब्लॉक में सिर्फ़ दो बटन दिए जा सकते हैं. हर पंक्ति में चार बटन तक. एक ओर एक ऐसा खतरा है कि उपयोगकर्ता जिसे ऐक्सेस नहीं कर पाते ताकि ज़रूरत के हिसाब से कार्रवाई की जा सके. दूसरी ओर, यूज़र इंटरफ़ेस (यूआई) इतना भरा हुआ है कि बटन दिखाई दे रहे हैं, जो स्टारशिप एंटरप्राइज़ के ब्रिज की तरह दिखते हैं.
d) सबसे सुविधाजनक तरीका है ब्लॉक में म्यूटेटर बबल जोड़ना. यह एक बटन के रूप में दिखाया जाता है, जिससे उसके लिए कॉन्फ़िगरेशन डायलॉग बॉक्स खुलता है ब्लॉक. एलिमेंट अपनी मर्ज़ी से जोड़े, मिटाए या फिर से व्यवस्थित किए जा सकते हैं.
इस अप्रोच का नुकसान यह है कि यह म्यूटेटर के लिए आसानी से काम नहीं करता नौसिखिए उपयोगकर्ता. म्यूटेटर के बारे में बताने के लिए कुछ तरीके की ज़रूरत होती है. छोटे बच्चों को टारगेट करने वाले ब्लॉकली ऐप्लिकेशन में म्यूटेटर का इस्तेमाल नहीं करना चाहिए. हालांकि, एक बार सीख लिए जाने के बाद भी ये जानकार उपयोगकर्ताओं के लिए अनमोल हैं.
सुझाव: हर रणनीति के अपने फ़ायदे और नुकसान हैं. चुनें कि क्या रणनीति सही है उपयोगकर्ता भी हैं.
9. कोड जनरेट करें
यह ज़रूरी है कि ब्लॉकली के बेहतर उपयोगकर्ता, जनरेट किया गया कोड देख सकें (JavaScript, Python, PHP, Lua, Dart वगैरह जैसी कंपनियां, उनके लिखे गए प्रोग्राम को तुरंत पहचान लेती हैं. इसका मतलब है कि मशीन से जनरेट किए गए इस कोड को सेव रखने के लिए ज़्यादा मेहनत करनी पड़ेगी पठनीय. ग़ैर-ज़रूरी ब्रैकेट, न्यूमेरिक वैरिएबल, खाली सफ़ेद जगह और वर्बोस कोड टेंप्लेट, शानदार कोड बनाने में मदद करते हैं. जनरेट किए गए कोड में टिप्पणियां होनी चाहिए और ये इन के मुताबिक होनी चाहिए Google की स्टाइल गाइड.
सुझाव: अपने जनरेट किए गए कोड पर गर्व महसूस करें. इसे उपयोगकर्ता को दिखाएं.
10. भाषा निर्भरता
साफ़ कोड की इच्छा का एक खराब असर यह होता है कि Blockly का व्यवहार इसका मुख्य रूप से यह इस्तेमाल किया जाता है कि अलग-अलग वैल्यू का एक साथ इस्तेमाल करने पर भाषा कैसे काम करती है. सबसे ज़्यादा सामान्य आउटपुट भाषा JavaScript है, लेकिन अगर Blockly को क्रॉस-कंपाइल करना था में नहीं किया गया है, तो Google को सुरक्षित रखने के लिए कोई अनुचित प्रयास नहीं किया जाना चाहिए दोनों भाषाओं में सटीक व्यवहार है. उदाहरण के लिए, JavaScript में स्ट्रिंग गलत है, जबकि Lua में यह सही है. इसका एक पैटर्न तय करना ब्लॉकली कोड के लिए कार्रवाई, चाहे वह टारगेट भाषा हो या नहीं नतीजे के तौर पर एक गड़बड़ी वाला कोड मिलता है.
सुझाव: Blockly कोई भाषा नहीं है, मौजूदा भाषा को व्यवहार पर असर पड़ता है.