यहाँ एक प्रोग्रामिंग / भाषा समस्या है जिस पर मैं आपके विचार सुनना चाहता हूँ।
हमने ऐसे कन्वेंशन विकसित किए हैं जो अधिकांश प्रोग्रामर (को) का पालन करना चाहिए जो भाषाओं के सिंटैक्स का हिस्सा नहीं हैं, लेकिन कोड को अधिक पठनीय बनाने के लिए काम करते हैं। ये निश्चित रूप से हमेशा बहस का विषय हैं लेकिन कम से कम कुछ मुख्य अवधारणाएं हैं जो अधिकांश प्रोग्रामर सहमत हैं। अपने चर को उचित रूप से नाम देना, सामान्य रूप से नामकरण करना, अपनी रेखाओं को लंबे समय तक कार्य नहीं करना, लंबे कार्यों, इनकैप्सुलेशन, उन चीजों से बचना।
हालाँकि, एक समस्या है जो मुझे अभी तक किसी पर भी टिप्पणी करने की नहीं मिली है और वह हो सकता है कि यह सबसे बड़ा गुच्छा हो। जब आप किसी फ़ंक्शन को कॉल करते हैं तो यह अनाम होने की तर्कों की समस्या है।
गणित से कार्य स्टेम जहां x (x) का एक स्पष्ट अर्थ है क्योंकि एक फ़ंक्शन की बहुत अधिक कठोर परिभाषा है जो यह आमतौर पर प्रोग्रामिंग में करता है। गणित में शुद्ध कार्य वे प्रोग्रामिंग में बहुत कम कर सकते हैं और वे बहुत अधिक सुरुचिपूर्ण उपकरण हैं, वे आमतौर पर केवल एक तर्क लेते हैं (जो आमतौर पर एक नंबर होता है) और वे हमेशा एक मूल्य (आमतौर पर एक संख्या भी) वापस करते हैं। यदि कोई फ़ंक्शन कई तर्क देता है, तो वे लगभग हमेशा फ़ंक्शन के डोमेन के अतिरिक्त आयाम होते हैं। दूसरे शब्दों में, एक तर्क दूसरों की तुलना में अधिक महत्वपूर्ण नहीं है। उन्हें स्पष्ट रूप से आदेश दिया गया है, निश्चित है, लेकिन इसके अलावा, उनके पास कोई शब्दार्थ आदेश नहीं है।
हालांकि प्रोग्रामिंग में, हमारे पास अधिक स्वतंत्रता वाले कार्य हैं, और इस मामले में मैं तर्क देता हूं कि यह अच्छी बात नहीं है। एक सामान्य स्थिति, आपके पास एक फ़ंक्शन इस तरह परिभाषित होता है
func DrawRectangleClipped (rectToDraw, fillColor, clippingRect) {}
परिभाषा को देखते हुए, यदि फ़ंक्शन सही ढंग से लिखा गया है, तो यह पूरी तरह से स्पष्ट है कि क्या है। फ़ंक्शन को कॉल करते समय, आपके पास आपके आईडीई / संपादक में कुछ अंतर्मुखी / कोड पूरा होने वाला जादू भी हो सकता है जो आपको बताएगा कि अगला तर्क क्या होना चाहिए। लेकिन रुकें। अगर मुझे जरूरत है कि जब मैं वास्तव में कॉल लिख रहा हूं, तो क्या ऐसा कुछ नहीं है जो हम यहां याद कर रहे हैं? कोड पढ़ने वाले व्यक्ति को IDE का लाभ नहीं होता है और जब तक वे परिभाषा में नहीं जाते हैं, उन्हें पता नहीं होता है कि तर्क के रूप में पारित किए गए दो आयतों में से किसके लिए उपयोग किया जाता है।
समस्या इससे भी आगे जाती है। यदि हमारे तर्क कुछ स्थानीय चर से आते हैं, तो ऐसी स्थितियां हो सकती हैं, जहां हमें यह भी नहीं पता कि दूसरा तर्क क्या है क्योंकि हम केवल चर नाम देखते हैं। उदाहरण के लिए इस कोड की लाइन लें
DrawRectangleClipped(deserializedArray[0], deserializedArray[1], deserializedArray[2])
यह विभिन्न भाषाओं में विभिन्न उदाहरणों के लिए दिया जाता है, लेकिन यहां तक कि कड़ाई से टाइप की गई भाषाओं में और यहां तक कि अगर आप अपने चर को समझदारी से नाम देते हैं, तो आप उस प्रकार का भी उल्लेख नहीं करते हैं जब आप फ़ंक्शन को पास कर रहे हैं।
जैसा कि यह आमतौर पर प्रोग्रामिंग के साथ होता है, इस समस्या के कई संभावित समाधान हैं। कई पहले से ही लोकप्रिय भाषाओं में लागू हैं। उदाहरण के लिए C # में नामित पैरामीटर। हालाँकि, मुझे पता है कि सभी महत्वपूर्ण कमियां हैं। प्रत्येक फ़ंक्शन कॉल पर प्रत्येक पैरामीटर का नामकरण संभवत: पठनीय कोड के लिए नहीं हो सकता है। यह लगभग ऐसा लगता है कि शायद हम संभावनाओं को आगे बढ़ा रहे हैं जो सादे पाठ प्रोग्रामिंग हमें देता है। हम लगभग हर क्षेत्र में JUST पाठ से चले गए हैं, फिर भी हम अभी भी समान हैं। कोड में प्रदर्शित करने के लिए अधिक जानकारी की आवश्यकता है? अधिक पाठ जोड़ें। वैसे भी, यह थोड़ा पेचीदा हो रहा है इसलिए मैं यहां रुक जाऊंगा।
एक उत्तर मुझे दूसरे कोड के स्निपेट से मिला, वह यह है कि आप पहले सरणी को कुछ नामित चरों पर अनपैक करेंगे और फिर उन का उपयोग करेंगे, लेकिन चर का नाम कई चीजों का मतलब हो सकता है और जिस तरह से इसे कहा जाता है, जरूरी नहीं कि वह आपको बताए जाने वाले तरीके को बताए। कहा फ़ंक्शन के संदर्भ में व्याख्या की जा सकती है। स्थानीय दायरे में, आपके पास दो आयताकार नाम हो सकते हैं, जिनका नाम लेक्टेंक्टंगल और राईरेक्टैंगल है क्योंकि वे शब्दार्थ का प्रतिनिधित्व करते हैं, लेकिन जब उन्हें किसी फ़ंक्शन को दिया जाता है, तो इसका विस्तार करने की आवश्यकता नहीं होती है।
वास्तव में, यदि आपके चरों को नामित फ़ंक्शन के संदर्भ में नामित किया जाता है, तो आप उस फ़ंक्शन कॉल के साथ संभावित रूप से कम जानकारी पेश कर रहे हैं और कुछ स्तर पर अगर कोड खराब हो सकता है। यदि आपके पास एक ऐसी प्रक्रिया है, जिसके परिणामस्वरूप आप rectForClipping में एक आयत जमा करते हैं और फिर एक अन्य प्रक्रिया जो rectForDrawing प्रदान करती है, तो DrawRectangleClipped को वास्तविक कॉल केवल समारोह है। एक पंक्ति जिसका अर्थ है कि कुछ भी नया नहीं है और वहां बस इतना है कि कंप्यूटर जानता है कि आप वास्तव में क्या चाहते हैं, भले ही आपने इसे अपने नामकरण के साथ पहले ही समझाया हो। यह अच्छी बात नहीं है।
मैं वास्तव में इस पर नए दृष्टिकोण सुनना पसंद करूंगा। मुझे यकीन है कि मैं इस समस्या पर विचार करने वाला पहला व्यक्ति नहीं हूं, तो यह कैसे हल किया जाता है?