ब्रैकेट डालें

ब्लॉक का मतलब ब्रैकेट है. उदाहरण के लिए, नीचे दिए गए ब्लॉक दिखने पर, आपको मान लीजिए कि इसका मतलब -(5 + 2) है -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 है. इसका इस्तेमाल तब किया जाता है, जब:

सबसे कम प्राथमिकता Order.NONE है. इसका इस्तेमाल तब किया जाता है, जब: