ऑफ-साइड नियम

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

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

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

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

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

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

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

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

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

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

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

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

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

 * एबीसी (प्रोग्रामिंग लैंग्वेज )
 * बू (प्रोग्रामिंग लैंग्वेज )
 * बडीस्क्रिप्ट
 * कोबरा (प्रोग्रामिंग लैंग्वेज )
 * कॉफ़ीस्क्रिप्ट
 * जुटना
 * करी (प्रोग्रामिंग लैंग्वेज )
 * एल्म (प्रोग्रामिंग लैंग्वेज )
 * F (प्रारंभिक संस्करणों में, जब  निर्दिष्ट किया जाता है; बाद के संस्करणों में जब    नहीं होता है )
 * जिन्न (प्रोग्रामिंग लैंग्वेज )
 * जीडीस्क्रिप्ट (गोडोट इंजन)
 * हास्केल (प्रोग्रामिंग लैंग्वेज ) (केवल,  ,  , या   खंड जब ब्रेसिज़ छोड़े जाते हैं)
 * सूचित करें 7
 * आईएसडब्ल्यूआईएम, वह अमूर्त लैंग्वेज जिसने नियम प्रस्तुत किया
 * लाइवस्क्रिप्ट (प्रोग्रामिंग लैंग्वेज )
 * मिरांडा (प्रोग्रामिंग लैंग्वेज )
 * मूनस्क्रिप्ट
 * नेमर्ले, वैकल्पिक मोड
 * निम (प्रोग्रामिंग लैंग्वेज )
 * अवसर (प्रोग्रामिंग लैंग्वेज )
 * प्रोमल
 * पायथन (प्रोग्रामिंग लैंग्वेज )
 * स्काला (प्रोग्रामिंग लैंग्वेज ), वैकल्पिक मोड
 * योजना (प्रोग्रामिंग लैंग्वेज ), कार्यान्वयन के लिए कई योजना अनुरोधों में से एक का उपयोग करते समय, जिनमें से नवीनतम है
 * स्पिन (प्रोग्रामिंग लैंग्वेज )
 * वोमा
 * एक्सएल (प्रोग्रामिंग लैंग्वेज )

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

 * हम्ल
 * मेक
 * पुनः संरचित टेक्स्ट
 * सैस (स्टाइलशीट लैंग्वेज )
 * स्टाइलस (स्टाइलशीट लैंग्वेज )
 * वाईएएमएल
 * पग (पूर्व में जेड),

यह भी देखें

 * प्रिटीप्रिंट
 * प्रिटीप्रिंट