ब्लॉक का मतलब ब्रैकेट है. उदाहरण के लिए, नीचे दिए गए ब्लॉक दिखने पर, आपको
मान लीजिए कि इसका मतलब -(5 + 2)
है -5 + 2
नहीं, क्योंकि 5
और 2
इसका हिस्सा हैं
एक ब्लॉक है और -
दूसरे ब्लॉक का हिस्सा है.
हालांकि, अगर हर ब्लॉक के आस-पास ब्रैकेट रखा जाता है, तो कोड काफ़ी छोटा हो जाता है
पठनीय. (((5) * (2)) + (3))
की तुलना 5 * 2 + 3
से करें. ये दोनों
एक्सप्रेशन का आकलन एक ही चीज़ (13
) करने के लिए होता है, लेकिन दूसरा बहुत आसान है
पढ़ें.
Blockly के ऑपरेटर प्राथमिकता नियम, कम से कम ज़्यादा से ज़्यादा पढ़ने के लिए, ब्रैकेट की संख्या.
"सही" जवाब जनरेट करें आउटपुट
अगर आपको जनरेट किए गए कोड को लोगों के पढ़ने लायक बनाने की ज़रूरत नहीं है, तो ब्रैकेट को छोटा करने की चिंता करने की ज़रूरत नहीं है. हर ब्लॉक को रैप करना एक अच्छा तरीका है, और यह पक्का करता है कि आपके जनरेट किए गए कोड का हमेशा सही आकलन किया जाए.
यह पक्का करने के लिए कि जवाब सही हो, Order.ATOMIC
से valueToCode
कॉल हमेशा पास करें और
अपने ब्लॉक-कोड जनरेटर से हमेशा Order.NONE
दिखाएं.
सबसे सही ब्रैकेट जनरेट करें
ब्रैकेट सिर्फ़ तब डाले जाने चाहिए, जब जनरेट किया गया कोड गलत हो उन्हें. ऐसा तब होता है, जब बाहरी ब्लॉक में किसी ऑपरेटर की प्राथमिकता होती है इनर ब्लॉक में किसी ऑपरेटर की प्राथमिकता से ज़्यादा मज़बूत हो.
उदाहरण के लिए, इन ब्लॉक में एक सिंगल निगेशन ऑपरेटर और एक ऐड-ऑन ऑपरेटर का इस्तेमाल करें. एकांतिक निगेशन की प्राथमिकता ऐड-ऑन ऑपरेटर का इस्तेमाल करें.
इसलिए, अगर ब्रैकेट नहीं जोड़े जाते हैं, तो आपको -5 + 2
मिलता है और -
का आकलन किया जाता है
+
से पहले, जो ब्लॉक से मेल नहीं खाता है.
जनरेटर को यह बताया जा सकता है कि उसे कब लगाना है और कितना मज़बूत है अलग-अलग ऑपरेटर हैं. अगर इसे पता चलता है कि आउटर ऑपरेटर ज़्यादा मज़बूत है इनर ऑपरेटर की तुलना में, यह इनर ऑपरेटर को सुरक्षित रखने के लिए ब्रैकेट शामिल करता है.
valueToCode
को आउटर ऑपरेटर की प्राथमिकता मिलती है और रिटर्न
टपल, इनर ऑपरेटर की प्राथमिकता तय करता है.
यहां एक ऐसे ब्लॉक का उदाहरण दिया गया है जिसमें दो ऑपरेटर हैं:
import {javascriptGenerator, Order} from 'blockly/javascript';
javascriptGenerator.forBlock['negate_plus_two'] = function(block, generator) {
// valueToCode takes in the precedence of the outer operator.
const innerCode = generator.valueToCode(block, 'INNER', Order.UNARY_NEGATION);
const code = `-${innerCode} + 2`;
// The return tuple specifies the precedence of the inner operator.
return [code, Order.ADDITION];
}
valueToCode प्राथमिकता
जब किसी इनर ब्लॉक का कोड जनरेट करने के लिए valueToCode
को कॉल किया जाता है, तब आप उसे पास कर देते हैं
इनर कोड पर काम करने वाले सबसे मज़बूत ऑपरेटर की प्राथमिकता
ब्लॉक. यह वह ऑपरेटर है जिससे अंदरूनी ब्लॉक के कोड को सुरक्षित करने की ज़रूरत होती है.
उदाहरण के लिए, नीचे दिए गए ब्लॉक में यूनरी निगेशन ऑपरेटर और
एडीशन ऑपरेटर, इनर ब्लॉक के कोड पर काम कर रहे होते हैं. द सिंगल निगेशन
ज़्यादा मज़बूत है, इसलिए आपको valueToCode
को यही प्राथमिकता देनी चाहिए.
// The - is the strongest operator acting on the inner code.
const innerCode = generator.valueToCode(block, 'INNER', Order.UNARY_NEGATION);
const code = `-${innerCode} + 2`;
सामान लौटाने का क्रम
जब ब्लॉक-कोड जनरेटर से प्राथमिकता लागू की जाती है, तो ब्लॉक के कोड में सबसे कमज़ोर ऑपरेटर की प्राथमिकता. यह है जिसे सुरक्षित रखने की ज़रूरत है.
उदाहरण के लिए, नीचे दिए गए ब्लॉक में एक सिंगल निगेशन ऑपरेटर और एक ऐड-ऑन ऑपरेटर का इस्तेमाल करें. जोड़ कमज़ोर है, इसलिए आपको यही प्राथमिकता देनी चाहिए ब्लॉक-कोड जनरेटर से वापस लौटें.
const code = `-${innerCode} + 2`;
// The + is the weakest operator in the block.
return [code, Order.ADDITION];
ऑर्डर की संख्या
हर भाषा जनरेटर मॉड्यूल एक Order
ईनम तय करता है, जिसमें ये सभी शामिल होते हैं
प्राथमिकताएँ तय करें.
ज़्यादा ज़रूरी होने पर बैकिंग वैल्यू कम होती हैं, जबकि कमज़ोर प्राथमिकता ज़्यादा बैकिंग वैल्यू इस्तेमाल की जा सकती हैं. किसी अहम प्राथमिकता को "रैंक" में रखा जा सकता है ज़्यादा" और कमज़ोर वरीयताओं को "निचली रैंक" के तौर पर दिखाया गया है - जैसे कि वे प्रतिस्पर्धा करने वाले लड़ाके थे.
यहां, पहले से मौजूद सभी भाषाओं के लिए Order
के ईनम मिल सकते हैं:
खास प्राथमिकताएँ
जनरेटर में ज़्यादातर प्राथमिकताएँ Order
ईनम, प्राथमिकताओं से मेल खाते हैं
तय करें. हालाँकि, दो खास चीज़ें हैं
प्राथमिकताएं, Order.ATOMIC
और Order.NONE
.
सबसे ज़्यादा प्राथमिकता Order.ATOMIC
है. इसका इस्तेमाल तब किया जाता है, जब:
- आपको यह पक्का करना हो कि कोड हमेशा ब्रैकेट में रखें,
ताकि आप उसे
valueToCode
को पास करें. - आपके ब्लॉक में कोई ऑपरेटर शामिल नहीं है, इसलिए आप इसे अपने ब्लॉक-कोड जनरेटर.
सबसे कम प्राथमिकता Order.NONE
है. इसका इस्तेमाल तब किया जाता है, जब:
- आपको यह पक्का करना हो कि कोड हमेशा ब्रैकेट में रखें, ताकि आप उसे अपने ब्लॉक-कोड जनरेटर से लौटा सकें.
- इनर ब्लॉक पर कोई ऑपरेटर काम नहीं करता है, इसलिए आप इसे
valueToCode
.