ऑफ-साइड नियम
एक कंप्यूटर प्रोग्रामिंगलैंग्वेज को सिंटैक्स के ऑफ-साइड नियम का पालन करने के लिए कहा जाता है यदि, उस लैंग्वेज में ब्लॉक उनके इंडेंटेशन द्वारा व्यक्त किए जाते हैं। संभवतः एसोसिएशन फुटबॉल में ऑफसाइड नियम पर एक वाक्य के रूप में पीटर लैंडिन द्वारा निर्मित किया गया था, इसकी तुलना फ्री-फॉर्म लैंग्वेजो से की जाती है, विशेष रूप से कर्ली-ब्रैकेट प्रोग्रामिंग लैंग्वेजो में, जहां इंडेंटेशन का कोई कम्प्यूटेशनल अर्थ नहीं होता है, और इंडेंट शैली मात्र कोडिंग कन्वेंशन और फॉर्मेटिंग की स्थिति मे होता है। साथ ही ऑफ-साइड-नियम लैंग्वेजो को भी महत्वपूर्ण इंडेंटेशन के रूप में वर्णित किया जाता है।
परिभाषा
[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]
}
इस शब्दकोश में, कुंजियाँ इंडेंटेड हैं, और एक सूची चार पंक्तियों के मध्य विभाजित है
कार्यान्वयन
ऑफ-साइड नियम को लेक्सिकल विश्लेषण चरण में लागू किया जा सकता है, जैसे कि पायथन में, जहां INDENT
टोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को बढ़ाने और DEDENT
टोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को कम करने का कार्य किया जाता है[2] ये टोकन उन लैंग्वेजओं में प्रारंभिक ब्रेस और समापन ब्रेस के अनुरूप हैं जो ब्लॉक के लिए ब्रैकेट का उपयोग करते हैं, और इसका अर्थ है कि वाक्यांश व्याकरण इस पर निर्भर नहीं करता है कि ब्रेसिज़ या इंडेंटेशन का उपयोग किया जाता है या नहीं इसके लिए आवश्यक है कि लेक्सर स्थिति को बनाए रखे, अर्थात् वर्तमान इंडेंट स्तर, और इस प्रकार जब यह बदलता है तो इंडेंटेशन में परिवर्तन का पता लगा सकता है, और इस प्रकार लेक्सिकल व्याकरण: INDENT
और DEDENT
पूर्व इंडेंट स्तर की प्रासंगिक जानकारी पर निर्भर करते हैं।।
विकल्प
इंडेंटिंग द्वारा ब्लॉकों को सीमांकित करने का प्राथमिक विकल्प, लैंग्वेज c के व्यापक उपयोग और प्रभाव से लोकप्रिय, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से कर्ली ब्रैकेट,i.e., {
and }
या किसी अन्य सीमांकक के साथ ब्लॉक को चिह्नित करना है।यद्यपि यह अधिक फॉर्मेटिंग फ़्रीडम की अनुमति देता है -एक डेवलपर ब्रेक और कंटिन्यू स्टेटमेंट जैसे कोड के छोटे टुकड़ों को इंडेंट न करने का विकल्प चुन सकता है अर्थात अव्यवस्थापूर्वक इंडेंट किया गया कोड पाठक को भटका सकता है, जैसे कि गोटो फेल बग।
लिस्प और अन्य एस-अभिव्यक्ति-आधारित लैंग्वेज कथनों को अभिव्यक्तियों से अलग नहीं करती हैं, और ब्रैकेट लैंग्वेज के भीतर सभी कथनों के सीमा को नियंत्रित करने के लिए पर्याप्त हैं। कर्ली - ब्रैकेट लैंग्वेजो की तरह, रिक्त स्थान को अधिकतर पाठक द्वारा अनदेखा कर दिया जाता है। व्हाईटस्पेस का उपयोग टोकन को अलग करने के लिए किया जाता है।[3] जो लिस्प कोड की स्पष्ट संरचना मानव पाठकों के लिए एक दृश्य संकेत बनाने के लिए स्वचालित इंडेंटिंग की अनुमति देती है।
इंडेंटिंग द्वारा ब्लॉकों को परिसीमित करने का प्राथमिक विकल्प, भाषा सी के व्यापक उपयोग और प्रभाव से लोकप्रिय, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से कर्ली ब्रैकेट या किसी अन्य सीमांकक के साथ ब्लॉक को चिह्नित करना है। एल्गोल 60 और उसके वंशावली पास्कल में ब्लॉक begin
और "end
कीवर्ड के मध्य आते हैं। सिन्टेक्स यह सुनिश्चित करता है कि प्रत्येक ब्लॉक का प्रारंभ और समाप्ति स्पष्ट रूप से उल्लिखित होती है। यद्यपि प्रास्कल में इंडेंटेशन महत्वपूर्ण नहीं है, परंतु न्यूलाइन का उपयोग योग्यतात्मक हो सकता है। बेसिक और फोरट्रान में, ब्लॉक का प्रारंभ ब्लॉक के नाम के साथ होती है (जैसे IF) और ब्लॉक के नाम के पहले "end
" लगाया जाता है फोरट्रान में प्रत्येक एक ब्लॉक का अपना स्वयं का नाम हो सकता है, जो लंबे कोड में और अधिक स्पष्टता जोड़ता है। एल्गोल 60 और बोर्न शेल, ब्लॉक की समाप्ति सामान्यतः पलटकर लिखे गए ब्लॉक के नाम द्वारा दी जाती है। उदाहरण के लिए, बोर्न शेल में स्विच कथनcase
" से प्रारंभ होता है और "esac
" तक चलता है। इसी प्रकार सशर्त if
...then
...[elif
...[else
...]]fi
या लूप्स के लिए "for
...do
...od मे
एल्गोल 60 या for
...do
...done मे बेश ।
इसका एक रोचक संस्करण मॉड्यूल-2 में होता है, यह एक पास्कल जैसी लैंग्वेज है जो एक और मल्टीलाइन ब्लॉक के मध्य के अंतर को दूर करती है। यह ब्लॉक ओपनर{
या BEGIN
) को फ़ंक्शन लेवल ब्लॉक के अतिरिक्त सभी के लिए छोड़े जाने की अनुमति देता है, जिसके लिए केवल ब्लॉक समाप्ति टोकन (}
या END
) की आवश्यकता होती है। यह अन्य निलंबित एल्स को भी ठीक करता है। कस्टम का उद्देश्य end
टोकन को शेष ब्लॉक के समान इंडेंट स्तर पर रखना है, जिससे एक ब्लॉक स्ट्रक्चर मिलता है जो अत्यधिक .रीडेबल होता है।
फोरट्रान के दृष्टिकोण से एक लाभ यह है कि यह लंबे, नेस्टेड या अन्यथा कॉम्प्लेक्स कोड की पठनीयता में सुधार करता है। एक आउटडेंट्स या क्लोजिंग ब्रैकेट्स का समूह केवल सांद्रत्यपूर्ण संकेत उपलब्ध कराता है कि प्रासंगिक संकेत कि कौन से ब्लॉक बंद किए जा रहे हैं, डिबगिंग के समय बैकट्रैकिंग और बारीकी से जांच की आवश्यकता है इसके अतिरिक्त, end
-जैसे कीवर्ड्स के लिए सफ्फिक्स की अनुमति देने वाली लैंग्वेज एं इस तरह की संकेतों को और बेहतर बनाती हैं, जैसे continue
और continue for x
। यद्यपि, आधुनिक स्रोत कोड संपादक प्रायः विजुअल संकेतक, जैसे हाइलाइटिंग सिंटेक्स, और कोड फोल्डिंग जैसी विशेषताएँ प्रदान करते हैं, जो इन दुष्प्रभावों के साथ मदद करते हैं।
उत्पादकता
स्काला लैंग्वेज में, प्रारंभिक संस्करणों में कर्ली ब्रेसेज की अनुमति थी। स्काला 3 ने संरचना ब्लॉकों में इंडेंटिंग का उपयोग करने के लिए एक विकल्प जोड़ा। डिज़ाइनर मार्टिन ओडरस्की ने कहा कि इससे कुल मिलाकर उत्पादकता में 10% का सुधार होता है, यह स्काला 3 में प्रस्तुत किया गया सबसे अधिक उत्पादक परिवर्तन प्रमाणित होता है, और इसके उपयोग की सलाह देता है
ऑफ-साइड नियम लैंग्वेज
प्रोग्रामिंग लैंग्वेज
- एबीसी
- बीओओ
- बडीस्क्रिप्ट
- कोबरा
- कॉफ़ीस्क्रिप्ट
- कन्वर्ज़
- करी
- एल्म
- एफ (प्रारंभिक संस्करणों में, जब
#light
निर्दिष्ट किया जाता है; बाद के संस्करणों में जब#light "off"
नहीं होता है[4]) - जिनी
- जीडीएस स्क्रिप्ट
- हास्केल [5] (केवल
where
,let
,do
, याcase ... of
खंड जब ब्रेसिज़ छोड़े जाते हैं) - इन्फॉर्म 7
- आईएसडब्ल्यूआईएम, वह अमूर्त लैंग्वेज जिसने नियम प्रस्तुत किया
- लाइवस्क्रिप्ट
- मिरांडा
- मूनस्क्रिप्ट[6][7]
- नेमर्ले, वैकल्पिक मोड
- निम
- ऑकम
- प्रोमल
- पायथन
- स्काला, वैकल्पिक मोड
- स्कीम, कार्यान्वयन के लिए कई योजना अनुरोधों में से एक का उपयोग करते समय, जिनमें से नवीनतम एसआरएफआई 119 है
- स्पिन
- वोमा
- एक्सएल
अन्य लैंग्वेज
- हम्ल
- मेक
- रिस्ट्रक्चर्ड टेक्स्ट [8]
- सैस
- स्टाइलस
- वाईएएमएल
- पग
यह भी देखें
- पायथन सिंटैक्स और शब्दार्थ § इंडेंटेशन
- प्रिटीप्रिंट
संदर्भ
- ↑ 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.
- ↑ Python Documentation, 2. Lexical analysis: 2.1.8. Indentation
- ↑ "CLHS: Section 2.1.4.7".
- ↑ 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.
- ↑ The Haskell Report – Layout
- ↑ MoonScript, a language that compiles to Lua
- ↑ MoonScript 0.5.0 – Language Guide
- ↑ reStructuredText Markup Specification – Indentation