प्रोग्रामिंग शैली

प्रोग्रामिंग शैली, जिसे कोड शैली के रूप में भी जाना जाता है, कंप्यूटर प्रोग्राम के लिए स्रोत कोड लिखते समय उपयोग किए जाने वाले नियमों या दिशानिर्देशों का एक सेट है। अक्सर यह दावा किया जाता है कि एक विशेष प्रोग्रामिंग शैली का पालन करने से प्रोग्रामर को शैली के अनुरूप स्रोत कोड को पढ़ने और समझने में मदद मिलेगी, और त्रुटियों को पेश करने से बचने में मदद मिलेगी।

इस विषय पर एक क्लासिक काम 1970 के दशक में लिखा गया 'प्रोग्रामिंग शैली के तत्व' था, और उस समय प्रचलित फोरट्रान और पीएल / आई भाषाओं के उदाहरणों के साथ चित्रित किया गया था।

किसी विशेष कार्यक्रम में उपयोग की जाने वाली प्रोग्रामिंग शैली किसी कंपनी या अन्य कंप्यूटिंग संगठन के कोडिंग सम्मेलनों के साथ-साथ कोड के लेखक की प्राथमिकताओं से प्राप्त की जा सकती है। प्रोग्रामिंग शैलियों को अक्सर एक विशिष्ट प्रोग्रामिंग भाषा (या भाषा परिवार) के लिए डिज़ाइन किया जाता है: सी (प्रोग्रामिंग भाषा) स्रोत कोड में अच्छी मानी जाने वाली शैली बुनियादी प्रोग्रामिंग भाषा स्रोत कोड आदि के लिए उपयुक्त नहीं हो सकती है। हालाँकि, कुछ नियम आमतौर पर कई भाषाओं पर लागू होते हैं।.

अच्छी शैली के तत्व
अच्छी शैली एक व्यक्तिपरक मामला है, और इसे परिभाषित करना कठिन है। हालाँकि, बड़ी संख्या में प्रोग्रामिंग शैलियों के लिए कई तत्व सामान्य हैं। आमतौर पर प्रोग्रामिंग शैली के हिस्से के रूप में माने जाने वाले मुद्दों में इंडेंटेशन (टाइपसेटिंग) सहित स्रोत कोड का लेआउट_ (कंप्यूटिंग) शामिल है; ऑपरेटरों और कीवर्ड के आसपास व्हाइटस्पेस_चरित्र का उपयोग; कीवर्ड और वेरिएबल नामों का कैपिटलाइज़ेशन या अन्यथा; उपयोगकर्ता परिभाषित पहचानकर्ताओं की शैली और वर्तनी, जैसे कार्य, प्रक्रिया और चर नाम; और टिप्पणी का उपयोग और शैली (कंप्यूटर प्रोग्रामिंग)।

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

इंडेंटेशन
इंडेंटेशन स्टाइल नियंत्रण प्रवाह और कोड के ब्लॉक की पहचान करने में सहायता करते हैं। कुछ प्रोग्रामिंग भाषाओं में, कोड के तार्किक ब्लॉकों को परिसीमित करने के लिए इंडेंटेशन का उपयोग किया जाता है; इन मामलों में सही इंडेंटेशन शैली की बात से कहीं अधिक है। अन्य भाषाओं में, इंडेंटेशन और व्हाइटस्पेस चरित्र फ़ंक्शन को प्रभावित नहीं करते हैं, हालांकि तार्किक और सुसंगत इंडेंटेशन कोड को अधिक पठनीय बनाता है। तुलना करना:

या कुछ के साथ

पहले दो उदाहरण शायद पढ़ने में बहुत आसान हैं क्योंकि वे एक स्थापित तरीके से इंडेंट किए गए हैं (एक फांसी अनुच्छेद शैली)। कई नेस्टेड निर्माणों से निपटने के दौरान यह इंडेंटेशन शैली विशेष रूप से उपयोगी होती है।

मोडलिक
मॉडुलिक ज़ीरो इंडेंटेशन स्टाइल समूह इंडेंटेशन के बजाय कैरिज रिटर्न  के साथ। उपरोक्त सभी की तुलना करें:

लुआ
लुआ (प्रोग्रामिंग भाषा) पारंपरिक घुंघराले ब्रेसिज़ या कोष्ठक का उपयोग नहीं करता है; बल्कि, एक सशर्त बयान में अभिव्यक्ति का पालन किया जाना चाहिए, और ब्लॉक के साथ बंद होना चाहिए. लुआ में इंडेंटेशन वैकल्पिक है।,  , और   लुआ में तार्किक ऑपरेटरों के रूप में कार्य करें। वे सत्य/झूठे कथन हैं, जैसे  मतलब झूठा होगा।

पायथन
पायथन भाषा नियंत्रण संरचनाओं को इंगित करने के लिए इंडेंटेशन का उपयोग करती है, इसलिए सही इंडेंटेशन की आवश्यकता होती है। ऐसा करने से, घुंघराले ब्रेसिज़ के साथ ब्रैकेटिंग की आवश्यकता होती है (यानी।  और  ) समाप्त हो जाता है। दूसरी ओर, पायथन कोड को कॉपी और पेस्ट करने से समस्याएँ हो सकती हैं, क्योंकि पेस्ट किए गए कोड का इंडेंटेशन स्तर वर्तमान लाइन के इंडेंटेशन स्तर के समान नहीं हो सकता है। इस तरह के सुधार को हाथ से करना थकाऊ हो सकता है, लेकिन कुछ पाठ संपादकों और एकीकृत विकास परिवेशों में इसे स्वचालित रूप से करने की विशेषताएं हैं। सफेद स्थान को हटाने वाले फ़ोरम या वेब पेज पर पोस्ट किए जाने पर पायथन कोड को अनुपयोगी होने पर भी समस्याएँ होती हैं, हालाँकि इस समस्या से बचा जा सकता है जहाँ सफेद स्थान-संरक्षण टैग जैसे कोड को संलग्न करना संभव है जैसे कि ... (एचटीएमएल के लिए), [कोड] ... [/कोड] ( bbcode के लिए), आदि।

ध्यान दें कि पायथन कर्ली ब्रेसिज़ का उपयोग नहीं करता है, लेकिन एक नियमित कोलन (उदा। ).

कई पायथन प्रोग्रामर PEP8 के रूप में जानी जाने वाली सामान्य रूप से सहमत शैली मार्गदर्शिका का पालन करते हैं। PEP8 अनुपालन को स्वचालित करने के लिए डिज़ाइन किए गए उपकरण हैं।

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

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

हालांकि, ध्यान दें कि लंबवत संरेखण के खिलाफ तर्क हैं:


 * 'अंतर-पंक्ति झूठी निर्भरता'; सारणीबद्ध स्वरूपण लाइनों के बीच निर्भरता बनाता है। उदाहरण के लिए, यदि एक लंबे नाम के साथ एक पहचानकर्ता को सारणीबद्ध लेआउट में जोड़ा जाता है, तो इसे समायोजित करने के लिए कॉलम की चौड़ाई बढ़ानी पड़ सकती है। यह स्रोत कोड में आवश्यकता से अधिक बड़े परिवर्तन को बाध्य करता है, और शोर में आवश्यक परिवर्तन खो सकता है। यह संशोधन नियंत्रण के लिए हानिकारक है जहां संस्करणों के बीच अंतर का निरीक्षण करना आवश्यक है।
 * 'भंगुरता'; यदि कोई प्रोग्रामर परिवर्तन करते समय तालिका को बड़े करीने से प्रारूपित नहीं करता है, तो शायद वैध रूप से पिछले बिंदु को ध्यान में रखते हुए, परिणाम एक गड़बड़ हो जाता है जो इस तरह के परिवर्तनों के साथ बिगड़ता है। सरल रीफैक्टरिंग ऑपरेशन, जैसे खोज-और-प्रतिस्थापन, भी स्वरूपण को तोड़ सकते हैं।
 * 'संशोधन का प्रतिरोध'; सारणीबद्ध स्वरूपण को बनाए रखने के लिए अधिक प्रयास की आवश्यकता होती है। यह एक प्रोग्रामर को लाभकारी परिवर्तन करने से रोक सकता है, जैसे पहचानकर्ता के नाम को जोड़ना, सुधारना या सुधारना, क्योंकि यह स्वरूपण को गड़बड़ कर देगा।
 * 'मोनो-स्पेस्ड फॉन्ट पर निर्भरता'; सारणीबद्ध स्वरूपण मानता है कि संपादक निश्चित-चौड़ाई वाले फ़ॉन्ट का उपयोग करता है। कई आधुनिक कोड संपादक आनुपातिक फोंट का समर्थन करते हैं, और प्रोग्रामर पठनीयता के लिए आनुपातिक फ़ॉन्ट का उपयोग करना पसंद कर सकते हैं।
 * 'उपकरण निर्भरता'; संरेखण बनाए रखने के कुछ प्रयासों को उपकरणों द्वारा कम किया जा सकता है (उदाहरण के लिए एक स्रोत कोड संपादक जो लोचदार टैबस्टॉप का समर्थन करता है), हालांकि यह ऐसे उपकरणों पर निर्भरता बनाता है।

उदाहरण के लिए, यदि ऊपर दिए गए कोड पर एक साधारण रीफैक्टरिंग ऑपरेशन किया जाता है, तो चर $replacement को $r और $anothervalue को $a नाम दिया जाता है, परिणामी कोड इस तरह दिखेगा:

इस तरह के बदलाव के बाद भी मूल अनुक्रमिक स्वरूपण ठीक दिखेगा:

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

उदाहरण के लिए, C कोड के निम्नलिखित वाक्यगत समकक्ष उदाहरणों की तुलना करें:

बनाम

टैब
सफेद स्थान बनाने के लिए टैब कुंजी का उपयोग विशेष मुद्दों को प्रस्तुत करता है जब पर्याप्त देखभाल नहीं की जाती है क्योंकि उपयोग किए जा रहे उपकरणों और यहां तक ​​कि उपयोगकर्ता की प्राथमिकताओं के आधार पर सारणीकरण बिंदु का स्थान भिन्न हो सकता है।

एक उदाहरण के रूप में, एक प्रोग्रामर चार के टैब का विश्राम स्थान को पसंद करता है और अपने टूलसेट को इस तरह कॉन्फ़िगर करता है, और इनका उपयोग अपने कोड को प्रारूपित करने के लिए करता है।

एक अन्य प्रोग्रामर आठ के टैब स्टॉप को पसंद करता है, और उनका टूलसेट इस तरह से कॉन्फ़िगर किया गया है। जब कोई अन्य व्यक्ति मूल व्यक्ति के कोड की जांच करता है, तो उसे पढ़ने में कठिनाई हो सकती है।

इस समस्या के एक व्यापक रूप से उपयोग किए जाने वाले समाधान में संरेखण के लिए टैब के उपयोग को प्रतिबंधित करना या टैब स्टॉप को कैसे सेट किया जाना चाहिए, इस पर नियम शामिल हो सकते हैं। ध्यान दें कि टैब ठीक काम करते हैं बशर्ते वे लगातार उपयोग किए जाते हैं, तार्किक इंडेंटेशन तक सीमित होते हैं, और संरेखण के लिए उपयोग नहीं किए जाते हैं:

यह भी देखें

 * कोडिंग सम्मेलन
 * मिश्रा सी
 * नामकरण परंपरा (प्रोग्रामिंग)