ऑफ-साइड नियम: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 3: Line 3:
प्रोग्रामिंग भाषा सिंटैक्स सुविधा||ऑफसाइड (बहुविकल्पी)}}
प्रोग्रामिंग भाषा सिंटैक्स सुविधा||ऑफसाइड (बहुविकल्पी)}}


एक कंप्यूटर प्रोग्रामिंग भाषा को सिंटैक्स के '''ऑफ-साइड नियम''' का पालन करने के लिए कहा जाता है यदि उस भाषा में ब्लॉक उनके इंडेंटेशन द्वारा व्यक्त किए जाते हैं  संभवतः एसोसिएशन फुटबॉल में ऑफसाइड नियम पर एक वाक्य के रूप में [[पीटर लैंडिन]] द्वारा निर्मित किया गया था, इसकी तुलना फ्री-फॉर्म भाषाओं से की जाती है, विशेष रूप से कर्ली-ब्रैकेट प्रोग्रामिंग भाषाओं में, जहां इंडेंटेशन का कोई कम्प्यूटेशनल अर्थ नहीं होता है, और इंडेंट शैली मात्र कोडिंग कन्वेंशन और फॉर्मेटिंग की स्थिति मे होता है। साथ ही ऑफ-साइड-नियम लैंग्वेजो को भी महत्वपूर्ण इंडेंटेशन के रूप में वर्णित किया जाता है।  
एक कंप्यूटर प्रोग्रामिंगलैंग्वेज को सिंटैक्स के '''ऑफ-साइड नियम''' का पालन करने के लिए कहा जाता है यदि, उस लैंग्वेज में ब्लॉक उनके इंडेंटेशन द्वारा व्यक्त किए जाते हैं। संभवतः एसोसिएशन फुटबॉल में ऑफसाइड नियम पर एक वाक्य के रूप में [[पीटर लैंडिन]] द्वारा निर्मित किया गया था, इसकी तुलना फ्री-फॉर्म लैंग्वेजो से की जाती है, विशेष रूप से कर्ली-ब्रैकेट प्रोग्रामिंगलैंग्वेजओं में, जहां इंडेंटेशन का कोई कम्प्यूटेशनल अर्थ नहीं होता है, और इंडेंट शैली मात्र कोडिंग कन्वेंशन और फॉर्मेटिंग की स्थिति मे होता है। साथ ही ऑफ-साइड-नियम लैंग्वेजो को भी महत्वपूर्ण इंडेंटेशन के रूप में वर्णित किया जाता है।  


==परिभाषा==
==परिभाषा==
Line 10: Line 10:


==कोड उदाहरण==
==कोड उदाहरण==
निम्नलिखित [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] में इंडेंटेशन ब्लॉक का एक उदाहरण है। पठनीयता के लिए कोलन पायथन भाषा सिंटैक्स का भाग हैं; ऑफ-साइड नियम को लागू करने के लिए उनकी आवश्यकता नहीं है।
निम्नलिखित पायथन में इंडेंटेशन ब्लॉक का एक उदाहरण है। रीडबिलिटी के लिए कोलन पायथन लैंग्वेज सिंटैक्स का अंग हैं; तथा ऑफ-साइड नियम को लागू करने के लिए उनकी आवश्यकता नहीं है।


पायथन में, नियम को घोषणाओं के अतिरिक्त कथनों की सीमाओं को परिभाषित करने के लिए लिया जाता है।
पायथन में, नियम को घोषणाओं के अतिरिक्त कथनों की सीमाओं को परिभाषित करने के लिए लिया जाता है।
Line 33: Line 33:
}
}
</syntaxhighlight>
</syntaxhighlight>
इस शब्दकोश में, कुंजियाँ इंडेंटेड हैं, और एक सूची चार पंक्तियों के बीच विभाजित है
इस शब्दकोश में, कुंजियाँ इंडेंटेड हैं, और एक सूची चार पंक्तियों के मध्यविभाजित है


==कार्यान्वयन==
==कार्यान्वयन==
.<ref>[https://docs.python.org/ Python Documentation], [https://docs.python.org/3/reference/lexical_analysis.html 2. Lexical analysis]: [https://docs.python.org/3/reference/lexical_analysis.html#indentation 2.1.8. Indentation]</ref> ऑफ-साइड नियम को लेक्सिकल विश्लेषण चरण में लागू किया जा सकता है, जैसे कि पायथन में, जहां <code>INDENT</code> टोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को बढ़ाने और <code>DEDENT</code>टोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को कम करने का कार्य किया जाता है ये टोकन उन भाषाओं में प्रारंभिक ब्रेस और समापन ब्रेस के अनुरूप हैं जो ब्लॉक के लिए ब्रेसिज़ का उपयोग करते हैं, और इसका अर्थ है कि वाक्यांश व्याकरण इस पर निर्भर नहीं करता है कि ब्रेसिज़ या इंडेंटेशन का उपयोग किया जाता है या नहीं इसके लिए आवश्यक है कि लेक्सर स्थिति को बनाए रखे, अर्थात् वर्तमान इंडेंट स्तर, और इस प्रकार जब यह बदलता है तो इंडेंटेशन में परिवर्तन का पता लगा सकता है, और इस प्रकार लेक्सिकल [[औपचारिक व्याकरण|व्याकरण]]: <code>INDENT</code>और <code>DEDENT</code> पूर्व इंडेंट स्तर की प्रासंगिक जानकारी पर निर्भर करते हैं।।
.<ref>[https://docs.python.org/ Python Documentation], [https://docs.python.org/3/reference/lexical_analysis.html 2. Lexical analysis]: [https://docs.python.org/3/reference/lexical_analysis.html#indentation 2.1.8. Indentation]</ref> ऑफ-साइड नियम को लेक्सिकल विश्लेषण चरण में लागू किया जा सकता है, जैसे कि पायथन में, जहां <code>INDENT</code> टोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को बढ़ाने और <code>DEDENT</code>टोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को कम करने का कार्य किया जाता है ये टोकन उन लैंग्वेजओं में प्रारंभिक ब्रेस और समापन ब्रेस के अनुरूप हैं जो ब्लॉक के लिए ब्रेसिज़ का उपयोग करते हैं, और इसका अर्थ है कि वाक्यांश व्याकरण इस पर निर्भर नहीं करता है कि ब्रेसिज़ या इंडेंटेशन का उपयोग किया जाता है या नहीं इसके लिए आवश्यक है कि लेक्सर स्थिति को बनाए रखे, अर्थात् वर्तमान इंडेंट स्तर, और इस प्रकार जब यह बदलता है तो इंडेंटेशन में परिवर्तन का पता लगा सकता है, और इस प्रकार लेक्सिकल [[औपचारिक व्याकरण|व्याकरण]]: <code>INDENT</code>और <code>DEDENT</code> पूर्व इंडेंट स्तर की प्रासंगिक जानकारी पर निर्भर करते हैं।।


==विकल्प==
==विकल्प==
इंडेंटिंग द्वारा ब्लॉकों को परिसीमित करने का प्राथमिक विकल्प, लैंग्वेज सी के व्यापक उपयोग और प्रभाव से लोकप्रिय, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से मध्यम कोष्ठक i.e., <code>{</code> and <code>}</code> या किसी अन्य सीमांकक के साथ ब्लॉक को चिह्नित करना है।यद्यपि यह अधिक स्वरूपण स्वतंत्रता की अनुमति देता है - एक डेवलपर ब्रेक और जारी कथन जैसे कोड के छोटे टुकड़ों को इंडेंट नहीं करने का विकल्प चुन सकता है,अर्थात अव्यवस्थापूर्वक इंडेंट किया गया कोड पाठक को भटका सकता है, जैसे कि गोटो फेल बग।   
इंडेंटिंग द्वारा ब्लॉकों को परिसीमित करने का प्राथमिक विकल्प, लैंग्वेज c के व्यापक उपयोग और प्रभाव से लोकप्रिय, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से मध्यम कोष्ठक i.e., <code>{</code> and <code>}</code> या किसी अन्य सीमांकक के साथ ब्लॉक को चिह्नित करना है।यद्यपि यह अधिक स्वरूपण स्वतंत्रता की अनुमति देता है - एक डेवलपर ब्रेक और जारी कथन जैसे कोड के छोटे टुकड़ों को इंडेंट नहीं करने का विकल्प चुन सकता है,अर्थात अव्यवस्थापूर्वक इंडेंट किया गया कोड पाठक को भटका सकता है, जैसे कि गोटो फेल बग।   


[[लिस्प (प्रोग्रामिंग भाषा)|लिस्प]] और अन्य [[एस-अभिव्यक्ति]]-आधारित लैंग्वेज कथनों को अभिव्यक्तियों से अलग नहीं करती हैं, और कोष्ठक लैंग्वेज के भीतर सभी कथनों के सीमा को नियंत्रित करने के लिए पर्याप्त हैं। मध्यम कोष्ठक लैंग्वेजो की तरह, रिक्त स्थान को अधिकतर पाठक द्वारा अनदेखा कर दिया जाता है। व्हाईटस्पेस का उपयोग टोकन को अलग करने के लिए किया जाता है।<ref>{{Cite web|url=http://clhs.lisp.se/Body/02_adg.htm|title = CLHS: Section 2.1.4.7}}</ref> जो लिस्प कोड की स्पष्ट संरचना मानव पाठकों के लिए एक दृश्य संकेत बनाने के लिए स्वचालित इंडेंटिंग की अनुमति देती है।   
[[लिस्प (प्रोग्रामिंग भाषा)|लिस्प]] और अन्य [[एस-अभिव्यक्ति]]-आधारित लैंग्वेज कथनों को अभिव्यक्तियों से अलग नहीं करती हैं, और कोष्ठक लैंग्वेज के भीतर सभी कथनों के सीमा को नियंत्रित करने के लिए पर्याप्त हैं। मध्यम कोष्ठक लैंग्वेजो की तरह, रिक्त स्थान को अधिकतर पाठक द्वारा अनदेखा कर दिया जाता है। व्हाईटस्पेस का उपयोग टोकन को अलग करने के लिए किया जाता है।<ref>{{Cite web|url=http://clhs.lisp.se/Body/02_adg.htm|title = CLHS: Section 2.1.4.7}}</ref> जो लिस्प कोड की स्पष्ट संरचना मानव पाठकों के लिए एक दृश्य संकेत बनाने के लिए स्वचालित इंडेंटिंग की अनुमति देती है।   


कुछ प्रोग्रामिंग लैंग्वेज ओं में प्रत्येक ब्लॉक की शुरुआत और समाप्ति के लिए स्पष्ट कीवर्ड उपयोग किए जाते हैं। इस तरीके से कोड ब्लॉक की सीमाओं की परिलैंग्वेज  में स्पष्टता और असंदिग्धता प्रदान करता है। [[ALGOL 60|एल्गोल 60]] और उसके वंशावली [[Pascal (programming language)|पास्कल]] में ब्लॉक <code>begin</code> और "<code>end</code> [[Reserved word|कीवर्ड]] के बीच आते हैं। यह सिन्टेक्स यह सुनिश्चित करता है कि प्रत्येक ब्लॉक का प्रारंभ और समाप्ति स्पष्ट रूप से उल्लिखित होती है। यद्यपि प्रास्कल में इंडेंटेशन महत्वपूर्ण नहीं है, परंतु न्यूलाइन का उपयोग योग्यतात्मक हो सकता है। [[BASIC|बेसिक]] और फोरट्रान में, ब्लॉक का प्रारंभ ब्लॉक के नाम के साथ होती है (जैसे IF) और ब्लॉक के नाम के पहले "<code>end</code>" लगाया जाता है  [[source code editor|फोरट्रान]] में प्रत्येक एक ब्लॉक का अपना स्वयं का नाम हो सकता है, जो लंबे कोड में और अधिक स्पष्टता जोड़ता है। [[ALGOL 60|एल्गोल 60]] और बोर्न शेल, ब्लॉक की समाप्ति सामान्यतः पलटकर लिखे गए ब्लॉक के नाम द्वारा दी जाती है। उदाहरण के लिए, बोर्न शेल में स्विच कथन <code>case</code>" से प्रारंभ होता है और "<code>esac</code>" तक चलता है।  
इंडेंटिंग द्वारा ब्लॉकों को परिसीमित करने का प्राथमिक विकल्प, भाषा सी के व्यापक उपयोग और प्रभाव से लोकप्रिय, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से कर्ली कोष्ठक या किसी अन्य सीमांकक के साथ ब्लॉक को चिह्नित करना है। [[ALGOL 60|एल्गोल 60]] और उसके वंशावली [[Pascal (programming language)|पास्कल]] में ब्लॉक <code>begin</code> और "<code>end</code> [[Reserved word|कीवर्ड]] के मध्य आते हैं। यह सिन्टेक्स यह सुनिश्चित करता है कि प्रत्येक ब्लॉक का प्रारंभ और समाप्ति स्पष्ट रूप से उल्लिखित होती है। यद्यपि प्रास्कल में इंडेंटेशन महत्वपूर्ण नहीं है, परंतु न्यूलाइन का उपयोग योग्यतात्मक हो सकता है। [[BASIC|बेसिक]] और फोरट्रान में, ब्लॉक का प्रारंभ ब्लॉक के नाम के साथ होती है (जैसे IF) और ब्लॉक के नाम के पहले "<code>end</code>" लगाया जाता है  [[source code editor|फोरट्रान]] में प्रत्येक एक ब्लॉक का अपना स्वयं का नाम हो सकता है, जो लंबे कोड में और अधिक स्पष्टता जोड़ता है। [[ALGOL 60|एल्गोल 60]] और बोर्न शेल, ब्लॉक की समाप्ति सामान्यतः पलटकर लिखे गए ब्लॉक के नाम द्वारा दी जाती है। उदाहरण के लिए, बोर्न शेल में स्विच कथन<code>case</code>" से प्रारंभ होता है और "<code>esac</code>" तक चलता है।  


इसी प्रकार सशर्त यदि, <code>if</code>...<code>then</code>...[<code>elif</code>...[<code>else</code>...]]<code>fi</code> या लूप्स "<code>for</code>...<code>do</code>...<code>od</code>" जैसी प्रतिबंधित वाक्यांशों के द्वारा ब्लॉक का प्रारंभ और समाप्ति स्पष्टतः निर्दिष्ट की जाती है। इसी प्रकार सशर्त यदि...तो...[elif...[else...]]fi या for लूप्स for...do...od मे [[ALGOL 60|एल्गोल 60]] मे की जा जाती है ।  
इसी प्रकार सशर्त यदि, <code>if</code>...<code>then</code>...[<code>elif</code>...[<code>else</code>...]]<code>fi</code> या लूप्स "<code>for</code>...<code>do</code>...<code>od</code>" जैसी प्रतिबंधित वाक्यांशों के द्वारा ब्लॉक का प्रारंभ और समाप्ति स्पष्टतः निर्दिष्ट की जाती है। इसी प्रकार सशर्त यदि...तो...[elif...[else...]]fi या for लूप्स for...do...od मे [[ALGOL 60|एल्गोल 60]] मे की जा जाती है ।  


इसका एक रोचक संस्करण  [[Modula-2|मॉड्यूल-2]] में होता है, यह एक पास्कल जैसी लैंग्वेज है जो एक और मल्टीलाइन ब्लॉक के बीच के अंतर को दूर करती है। यह ब्लॉक ओपनर<code>{</code> या <code>BEGIN</code>) को फ़ंक्शन लेवल ब्लॉक के अतिरिक्त सभी के लिए छोड़े जाने की अनुमति देता है, जिसके लिए केवल ब्लॉक समाप्ति टोकन  (<code>}</code> या <code>END</code>) की आवश्यकता होती है। यह अन्य  [[dangling else|निलंबित एल्स]] को भी ठीक करता है। कस्टम का उद्देश्य  <code>end</code> टोकन को बाकी ब्लॉक के समान इंडेंट स्तर पर रखना है, जिससे एक ब्लॉकस्ट्रक्चर मिलता है जो अत्यधिक पठनीय होता है।
इसका एक रोचक संस्करण  [[Modula-2|मॉड्यूल-2]] में होता है, यह एक पास्कल जैसी लैंग्वेज है जो एक और मल्टीलाइन ब्लॉक के मध्यके अंतर को दूर करती है। यह ब्लॉक ओपनर<code>{</code> या <code>BEGIN</code>) को फ़ंक्शन लेवल ब्लॉक के अतिरिक्त सभी के लिए छोड़े जाने की अनुमति देता है, जिसके लिए केवल ब्लॉक समाप्ति टोकन  (<code>}</code> या <code>END</code>) की आवश्यकता होती है। यह अन्य  [[dangling else|निलंबित एल्स]] को भी ठीक करता है। कस्टम का उद्देश्य  <code>end</code> टोकन को बाकी ब्लॉक के समान इंडेंट स्तर पर रखना है, जिससे एक ब्लॉकस्ट्रक्चर मिलता है जो अत्यधिक पठनीय होता है।


[[source code editor|फोरट्रान]] के दृष्टिकोण से एक लाभ यह है कि यह लंबे, नेस्टेड या अन्यथा जटिल कोड की पठनीयता में सुधार करता है। एक आउटडेंट्स या समाप्ति ब्रैकेट्स का समूह केवल सांद्रत्यपूर्ण संकेत उपलब्ध कराता है कि कौन से ब्लॉक बंद हो रहे हैं, जिससे पीछे जाना और [[debugging|निलंबित]] के समय अधिक सतर्कता की आवश्यकता होती है। इसके अतिरिक्त, <code>end</code>-जैसे कीवर्ड्स के लिए सफ्फिक्स की अनुमति देने वाली लैंग्वेज एं इस तरह की संकेतों को और बेहतर बनाती हैं, जैसे <code>continue</code> और  <code>continue for x</code>। यद्यपि, आधुनिक स्रोत [[source code editor|कोड संपादक]] प्रायः विजुअल संकेतक, जैसे [[syntax highlighting|हाइलाइटिंग सिंटेक्स]], और [[code folding|कोड फोल्डिंग]] जैसी विशेषताएँ प्रदान करते हैं, जो इन दुष्प्रभावों के साथ मदद करते हैं।
[[source code editor|फोरट्रान]] के दृष्टिकोण से एक लाभ यह है कि यह लंबे, नेस्टेड या अन्यथा जटिल कोड की पठनीयता में सुधार करता है। एक आउटडेंट्स या समाप्ति ब्रैकेट्स का समूह केवल सांद्रत्यपूर्ण संकेत उपलब्ध कराता है कि कौन से ब्लॉक बंद हो रहे हैं, जिससे पीछे जाना और [[debugging|निलंबित]] के समय अधिक सतर्कता की आवश्यकता होती है। इसके अतिरिक्त, <code>end</code>-जैसे कीवर्ड्स के लिए सफ्फिक्स की अनुमति देने वाली लैंग्वेज एं इस तरह की संकेतों को और बेहतर बनाती हैं, जैसे <code>continue</code> और  <code>continue for x</code>। यद्यपि, आधुनिक स्रोत [[source code editor|कोड संपादक]] प्रायः विजुअल संकेतक, जैसे [[syntax highlighting|हाइलाइटिंग सिंटेक्स]], और [[code folding|कोड फोल्डिंग]] जैसी विशेषताएँ प्रदान करते हैं, जो इन दुष्प्रभावों के साथ मदद करते हैं।

Revision as of 12:55, 23 July 2023

एक कंप्यूटर प्रोग्रामिंगलैंग्वेज को सिंटैक्स के ऑफ-साइड नियम का पालन करने के लिए कहा जाता है यदि, उस लैंग्वेज में ब्लॉक उनके इंडेंटेशन द्वारा व्यक्त किए जाते हैं। संभवतः एसोसिएशन फुटबॉल में ऑफसाइड नियम पर एक वाक्य के रूप में पीटर लैंडिन द्वारा निर्मित किया गया था, इसकी तुलना फ्री-फॉर्म लैंग्वेजो से की जाती है, विशेष रूप से कर्ली-ब्रैकेट प्रोग्रामिंगलैंग्वेजओं में, जहां इंडेंटेशन का कोई कम्प्यूटेशनल अर्थ नहीं होता है, और इंडेंट शैली मात्र कोडिंग कन्वेंशन और फॉर्मेटिंग की स्थिति मे होता है। साथ ही ऑफ-साइड-नियम लैंग्वेजो को भी महत्वपूर्ण इंडेंटेशन के रूप में वर्णित किया जाता है।

परिभाषा

[1]पीटर लैंडिन ने अपने 1966 के लेख "द नेक्स्ट 700 प्रोग्रामिंग लैंग्वेजेज" में ऑफ-साइड नियम को इस प्रकार परिभाषित किया: "पिछली लाइन पर पहले ऐसे टोकन के बाईं ओर कोई भी गैर-व्हाट्सएप टोकन एक नई डिक्लेरेशन का प्रारंभ माना जाता है


कोड उदाहरण

निम्नलिखित पायथन में इंडेंटेशन ब्लॉक का एक उदाहरण है। रीडबिलिटी के लिए कोलन पायथन लैंग्वेज सिंटैक्स का अंग हैं; तथा ऑफ-साइड नियम को लागू करने के लिए उनकी आवश्यकता नहीं है।

पायथन में, नियम को घोषणाओं के अतिरिक्त कथनों की सीमाओं को परिभाषित करने के लिए लिया जाता है।

def is_even(a: int) -> bool:
    """Determine whether number 'a' is even."""
    if a % 2 == 0:
        print('Even!')
        return True
    print('Odd!')
    return False

पायथन कोष्ठक के भीतर ऑफ-साइड नियम को भी निलंबित करता है। कोष्ठक के भीतर एक कथन तब तक जारी रहता है जब तक कि उसके कोष्ठक मेल नहीं खाते।

{
    "this": True,
    "that": False,
    "them": [1, 2,
3, 4, 5, 
6, 7, 8,
9, 10, 11, 12]
}

इस शब्दकोश में, कुंजियाँ इंडेंटेड हैं, और एक सूची चार पंक्तियों के मध्यविभाजित है

कार्यान्वयन

.[2] ऑफ-साइड नियम को लेक्सिकल विश्लेषण चरण में लागू किया जा सकता है, जैसे कि पायथन में, जहां INDENT टोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को बढ़ाने और DEDENTटोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को कम करने का कार्य किया जाता है ये टोकन उन लैंग्वेजओं में प्रारंभिक ब्रेस और समापन ब्रेस के अनुरूप हैं जो ब्लॉक के लिए ब्रेसिज़ का उपयोग करते हैं, और इसका अर्थ है कि वाक्यांश व्याकरण इस पर निर्भर नहीं करता है कि ब्रेसिज़ या इंडेंटेशन का उपयोग किया जाता है या नहीं इसके लिए आवश्यक है कि लेक्सर स्थिति को बनाए रखे, अर्थात् वर्तमान इंडेंट स्तर, और इस प्रकार जब यह बदलता है तो इंडेंटेशन में परिवर्तन का पता लगा सकता है, और इस प्रकार लेक्सिकल व्याकरण: INDENTऔर DEDENT पूर्व इंडेंट स्तर की प्रासंगिक जानकारी पर निर्भर करते हैं।।

विकल्प

इंडेंटिंग द्वारा ब्लॉकों को परिसीमित करने का प्राथमिक विकल्प, लैंग्वेज c के व्यापक उपयोग और प्रभाव से लोकप्रिय, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से मध्यम कोष्ठक i.e., { and } या किसी अन्य सीमांकक के साथ ब्लॉक को चिह्नित करना है।यद्यपि यह अधिक स्वरूपण स्वतंत्रता की अनुमति देता है - एक डेवलपर ब्रेक और जारी कथन जैसे कोड के छोटे टुकड़ों को इंडेंट नहीं करने का विकल्प चुन सकता है,अर्थात अव्यवस्थापूर्वक इंडेंट किया गया कोड पाठक को भटका सकता है, जैसे कि गोटो फेल बग।

लिस्प और अन्य एस-अभिव्यक्ति-आधारित लैंग्वेज कथनों को अभिव्यक्तियों से अलग नहीं करती हैं, और कोष्ठक लैंग्वेज के भीतर सभी कथनों के सीमा को नियंत्रित करने के लिए पर्याप्त हैं। मध्यम कोष्ठक लैंग्वेजो की तरह, रिक्त स्थान को अधिकतर पाठक द्वारा अनदेखा कर दिया जाता है। व्हाईटस्पेस का उपयोग टोकन को अलग करने के लिए किया जाता है।[3] जो लिस्प कोड की स्पष्ट संरचना मानव पाठकों के लिए एक दृश्य संकेत बनाने के लिए स्वचालित इंडेंटिंग की अनुमति देती है।

इंडेंटिंग द्वारा ब्लॉकों को परिसीमित करने का प्राथमिक विकल्प, भाषा सी के व्यापक उपयोग और प्रभाव से लोकप्रिय, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से कर्ली कोष्ठक या किसी अन्य सीमांकक के साथ ब्लॉक को चिह्नित करना है। एल्गोल 60 और उसके वंशावली पास्कल में ब्लॉक begin और "end कीवर्ड के मध्य आते हैं। यह सिन्टेक्स यह सुनिश्चित करता है कि प्रत्येक ब्लॉक का प्रारंभ और समाप्ति स्पष्ट रूप से उल्लिखित होती है। यद्यपि प्रास्कल में इंडेंटेशन महत्वपूर्ण नहीं है, परंतु न्यूलाइन का उपयोग योग्यतात्मक हो सकता है। बेसिक और फोरट्रान में, ब्लॉक का प्रारंभ ब्लॉक के नाम के साथ होती है (जैसे IF) और ब्लॉक के नाम के पहले "end" लगाया जाता है फोरट्रान में प्रत्येक एक ब्लॉक का अपना स्वयं का नाम हो सकता है, जो लंबे कोड में और अधिक स्पष्टता जोड़ता है। एल्गोल 60 और बोर्न शेल, ब्लॉक की समाप्ति सामान्यतः पलटकर लिखे गए ब्लॉक के नाम द्वारा दी जाती है। उदाहरण के लिए, बोर्न शेल में स्विच कथनcase" से प्रारंभ होता है और "esac" तक चलता है।

इसी प्रकार सशर्त यदि, if...then...[elif...[else...]]fi या लूप्स "for...do...od" जैसी प्रतिबंधित वाक्यांशों के द्वारा ब्लॉक का प्रारंभ और समाप्ति स्पष्टतः निर्दिष्ट की जाती है। इसी प्रकार सशर्त यदि...तो...[elif...[else...]]fi या for लूप्स for...do...od मे एल्गोल 60 मे की जा जाती है ।

इसका एक रोचक संस्करण मॉड्यूल-2 में होता है, यह एक पास्कल जैसी लैंग्वेज है जो एक और मल्टीलाइन ब्लॉक के मध्यके अंतर को दूर करती है। यह ब्लॉक ओपनर{ या BEGIN) को फ़ंक्शन लेवल ब्लॉक के अतिरिक्त सभी के लिए छोड़े जाने की अनुमति देता है, जिसके लिए केवल ब्लॉक समाप्ति टोकन (} या END) की आवश्यकता होती है। यह अन्य निलंबित एल्स को भी ठीक करता है। कस्टम का उद्देश्य end टोकन को बाकी ब्लॉक के समान इंडेंट स्तर पर रखना है, जिससे एक ब्लॉकस्ट्रक्चर मिलता है जो अत्यधिक पठनीय होता है।

फोरट्रान के दृष्टिकोण से एक लाभ यह है कि यह लंबे, नेस्टेड या अन्यथा जटिल कोड की पठनीयता में सुधार करता है। एक आउटडेंट्स या समाप्ति ब्रैकेट्स का समूह केवल सांद्रत्यपूर्ण संकेत उपलब्ध कराता है कि कौन से ब्लॉक बंद हो रहे हैं, जिससे पीछे जाना और निलंबित के समय अधिक सतर्कता की आवश्यकता होती है। इसके अतिरिक्त, end-जैसे कीवर्ड्स के लिए सफ्फिक्स की अनुमति देने वाली लैंग्वेज एं इस तरह की संकेतों को और बेहतर बनाती हैं, जैसे continue और continue for x। यद्यपि, आधुनिक स्रोत कोड संपादक प्रायः विजुअल संकेतक, जैसे हाइलाइटिंग सिंटेक्स, और कोड फोल्डिंग जैसी विशेषताएँ प्रदान करते हैं, जो इन दुष्प्रभावों के साथ मदद करते हैं।

उत्पादकता

स्काला लैंग्वेज में, प्रारंभिक संस्करणों में कर्वी ब्रेसेज को ही अनुमति दी जाती थी। स्काला 3 ने एक विकल्प जोड़ा है जिससे ब्लॉक को संरचित करने के लिए इंडेंटिंग का उपयोग किया जा सकता है। डिज़ाइनर मार्टिन ओडर्स्की ने कहा है कि इससे कुल में उत्पादकता 10% तक बढ़ जाती है, यह स्काला 3 में प्रस्तुत की गई सबसे उत्पादक बदलाव होता है, और इसके उपयोग की सलाह दी जाती है।


ऑफ-साइड नियम लैंग्वेज

प्रोग्रामिंग लैंग्वेज

अन्य लैंग्वेज एँ

यह भी देखें

संदर्भ

  1. Landin, P. J. (March 1966). "The next 700 programming languages" (PDF). Communications of the ACM. 9 (3): 157–166. doi:10.1145/365230.365257. S2CID 13409665.
  2. Python Documentation, 2. Lexical analysis: 2.1.8. Indentation
  3. "CLHS: Section 2.1.4.7".
  4. Syme, Don. "Detailed Release Notes for the F# May 2009 CTP Update and Visual Studio 2010 Beta1 releases". Archived from the original on 2019-01-21.
  5. The Haskell Report – Layout
  6. MoonScript, a language that compiles to Lua
  7. MoonScript 0.5.0 – Language Guide
  8. reStructuredText Markup Specification – Indentation