मैंने कभी इस तरह के बयानों को नहीं समझा। ईमानदार होने के लिए, भले ही आप किसी प्रकार के फ़ंक्शन की वापसी की घोषणा करते हैं, आप कोड की कई पंक्तियाँ लिखे जाने के बाद इसे भूल सकते हैं और भूल जाएंगे, और फिर भी आपको उस पंक्ति पर वापस लौटना होगा जिसमें यह खोज फ़ंक्शन का उपयोग करके घोषित किया गया है इसे जांचने के लिए आपका टेक्स्ट एडिटर।
यह आपके बारे में नहीं है कि आप रिटर्न प्रकार को भूल जाएं - यह हमेशा होने वाला है। यह उस टूल के बारे में है जो आपको यह बताने में सक्षम करता है कि आप रिटर्न प्रकार भूल गए हैं।
एक अतिरिक्त के रूप में, फ़ंक्शन प्रकार के साथ घोषित किए जाते हैं funcname()...
, प्रकार जानने वाले व्हाइटआउट को आपको प्रत्येक पंक्ति पर खोज करना होगा जिसमें फ़ंक्शन कहा जाता है, क्योंकि आप केवल जानते हैं funcname
, जबकि पायथन और इस तरह आप बस खोज कर सकते हैं def funcname
या function funcname
जो केवल एक बार होता है। घोषणा पर।
यह वाक्य रचना का विषय है, जो पूरी तरह से स्थैतिक टाइपिंग से असंबंधित है।
जब आप अपने निपटान में विशेष उपकरण के बिना एक घोषणा को देखना चाहते हैं तो सी परिवार वाक्यविन्यास वास्तव में अमित्र है। अन्य भाषाओं में यह समस्या नहीं है। देखें जंग की घोषणा सिंटैक्स:
fn funcname(a: i32) -> i32
अधिक से अधिक, REPLs के साथ यह एक फ़ंक्शन का परीक्षण करने के लिए तुच्छ है क्योंकि यह विभिन्न इनपुट्स के साथ वापसी प्रकार है, जबकि सांख्यिकीय रूप से टाइप की गई भाषाओं के साथ आपको कोड की कुछ पंक्तियों को जोड़ना होगा और घोषित किए गए प्रकार को जानने के लिए सब कुछ फिर से लिखना होगा।
किसी भी भाषा की व्याख्या की जा सकती है और किसी भी भाषा का REPL हो सकता है।
इसलिए, एक फ़ंक्शन के रिटर्न प्रकार को जानने के अलावा, जो स्पष्ट रूप से सांख्यिकीय रूप से टाइप की जाने वाली भाषाओं का एक मजबूत बिंदु नहीं है, स्थैतिक टाइपिंग वास्तव में बड़ी परियोजनाओं में कैसे सहायक है?
मैं एक अमूर्त तरीके से जवाब दूंगा।
एक प्रोग्राम में विभिन्न ऑपरेशन होते हैं और उन ऑपरेशनों को उस तरह से निर्धारित किया जाता है जैसे वे कुछ मान्यताओं के कारण होते हैं जो डेवलपर बनाता है।
कुछ धारणाएँ निहित हैं और कुछ स्पष्ट हैं। कुछ धारणाएँ अपने पास के एक ऑपरेशन की चिंता करती हैं, तो कुछ उनसे दूर एक ऑपरेशन की चिंता करती हैं। एक धारणा को पहचानना आसान है जब यह स्पष्ट रूप से व्यक्त किया जाता है और उन स्थानों के जितना संभव हो उतना करीब होता है जहां इसका सत्य मूल्य मायने रखता है।
एक बग एक धारणा की अभिव्यक्ति है जो कार्यक्रम में मौजूद है लेकिन कुछ मामलों के लिए पकड़ नहीं है। बग को ट्रैक करने के लिए, हमें गलत धारणा की पहचान करने की आवश्यकता है। बग को हटाने के लिए, हमें या तो उस धारणा को कार्यक्रम से हटाना होगा या कुछ बदलना होगा ताकि यह धारणा वास्तव में बनी रहे।
मैं मान्यताओं को दो प्रकारों में वर्गीकृत करना चाहता हूं।
पहली तरह की धारणाएं हैं जो कार्यक्रम के इनपुट के आधार पर पकड़ या नहीं कर सकती हैं। इस तरह की एक गलत धारणा की पहचान करने के लिए, हमें कार्यक्रम के सभी संभावित आदानों के स्थान की खोज करने की आवश्यकता है। शिक्षित अनुमानों और तर्कसंगत सोच का उपयोग करके, हम समस्या को कम कर सकते हैं और बहुत कम जगह में खोज सकते हैं। लेकिन फिर भी, जैसा कि एक कार्यक्रम थोड़ा सा बढ़ता है, इसका प्रारंभिक इनपुट स्थान एक विशाल दर से बढ़ता है - उस बिंदु तक जहां इसे सभी व्यावहारिक उद्देश्यों के लिए अनंत माना जा सकता है।
दूसरी तरह की धारणाएं हैं जो निश्चित रूप से सभी इनपुटों के लिए हैं, या निश्चित रूप से सभी इनपुटों के लिए गलत हैं। जब हम इस तरह की धारणा को गलत मानते हैं, तो हमें प्रोग्राम को चलाने या किसी इनपुट का परीक्षण करने की भी आवश्यकता नहीं है। जब हम इस तरह की धारणा को सही मानते हैं, तो हमें बग ( किसी बग) पर नज़र रखने के दौरान इसकी परवाह करने में कम संदेह होता है । इसलिए, इस तरह के होने के रूप में संभव के रूप में कई मान्यताओं होने में मूल्य है।
दूसरी श्रेणी (हमेशा सही या हमेशा गलत, इनपुट्स से स्वतंत्र) में एक धारणा रखने के लिए, हमें उस स्थान पर उपलब्ध होने के लिए न्यूनतम मात्रा में जानकारी की आवश्यकता होती है जहां धारणा बनाई जाती है। एक कार्यक्रम के स्रोत कोड के पार, जानकारी बहुत जल्दी बासी हो जाती है (उदाहरण के लिए, कई कंपाइलर इंटरप्रोडेक्टल विश्लेषण नहीं करते हैं, जो किसी भी कॉल को अधिकांश जानकारी के लिए एक कठिन सीमा बनाता है)। हमें आवश्यक जानकारी को ताज़ा (वैध और पास) रखने का एक तरीका चाहिए।
एक तरीका यह है कि इस जानकारी के स्रोत को उस स्थान के जितना संभव हो सके, जहां इसका उपभोग किया जा रहा है, लेकिन यह अधिकांश उपयोग के मामलों के लिए अव्यावहारिक हो सकता है। एक और तरीका है सूचना को बार-बार दोहराना, स्रोत कोड में इसकी प्रासंगिकता को नवीनीकृत करना।
जैसा कि आप पहले से ही अनुमान लगा सकते हैं, स्थैतिक प्रकार बिल्कुल वही हैं - स्रोत कोड में बिखरे हुए प्रकार की जानकारी के बीकन। उस जानकारी का उपयोग दूसरी श्रेणी में प्रकार शुद्धता के बारे में अधिकांश धारणाएं करने के लिए किया जा सकता है, जिसका अर्थ है कि लगभग किसी भी ऑपरेशन को हमेशा वर्गीकृत किया जा सकता है या टाइप संगतता के संबंध में हमेशा गलत।
जब हमारे प्रकार गलत होते हैं, तो विश्लेषण देर से शुरू करने के बजाय बग को हमारे ध्यान में लाकर हमें समय बचाता है। जब हमारे प्रकार सही होते हैं, तो विश्लेषण यह सुनिश्चित करके हमें समय बचाता है कि जब कोई बग होता है, तो हम तुरंत टाइप त्रुटियों को नियंत्रित कर सकते हैं।