यह एक दोस्त के साथ चर्चा में आया, और मैंने खुद को किसी भी अच्छे तर्क के बारे में सोचने के लिए कठोर पाया। कमजोर टाइपिंग कॉन्फ्रेंस के क्या लाभ हैं?
यह एक दोस्त के साथ चर्चा में आया, और मैंने खुद को किसी भी अच्छे तर्क के बारे में सोचने के लिए कठोर पाया। कमजोर टाइपिंग कॉन्फ्रेंस के क्या लाभ हैं?
जवाबों:
इस तरह की चर्चा के साथ समस्या यह है कि शब्द "कमजोर टाइपिंग" और "मजबूत टाइपिंग" अपरिभाषित हैं, उदाहरण के लिए "स्थिर टाइपिंग", "डायनामिक टाइपिंग", "स्पष्ट टाइपिंग", "निहित टाइपिंग", " बतख टाइपिंग "," संरचनात्मक टाइपिंग "या" नाममात्र टाइपिंग "। हेक, यहां तक कि शब्द "प्रकट टाइपिंग" और "अव्यक्त टाइपिंग", जो अभी भी अनुसंधान और चर्चा के खुले क्षेत्र हैं, शायद बेहतर परिभाषित हैं।
इसलिए, जब तक आपका दोस्त "कमजोर टाइपिंग" शब्द की परिभाषा प्रदान करता है, जो कि एक चर्चा के आधार के रूप में काम करने के लिए पर्याप्त स्थिर है, तो इस प्रश्न का उत्तर देने का कोई मतलब नहीं है।
दुर्भाग्य से, निक के जवाब के अलावा , उत्तरदाताओं में से कोई भी अपनी परिभाषा प्रदान करने के लिए परेशान नहीं करता है, और आप कुछ टिप्पणियों में उत्पन्न भ्रम को देख सकते हैं। यह बताना मुश्किल है, क्योंकि कोई भी वास्तव में अपनी परिभाषा प्रदान नहीं करता है, लेकिन मुझे लगता है कि मैं कम से कम तीन अलग-अलग लोगों को गिनता हूं, बस इस पृष्ठ पर।
आमतौर पर इस्तेमाल की जाने वाली परिभाषाओं में से कुछ हैं (और हाँ, मुझे पता है कि उनमें से कोई भी कोई मतलब नहीं है, लेकिन वे परिभाषाएं हैं जिन्हें मैंने देखा है कि लोग वास्तव में उपयोग करते हैं):
हालांकि, तीन परिभाषाएं जो सबसे अधिक व्यापक रूप से उपयोग की जाती हैं, वे हैं
जब तक हर कोई "कमजोर टाइपिंग" की परिभाषा पर सहमत नहीं हो जाता है , तब तक यह सोचने का कोई मतलब नहीं है कि इसके फायदे क्या हो सकते हैं। क्या लाभ? इससे भी बदतर, अगर कोई परिभाषा बिल्कुल भी नहीं है , तो हर कोई अपनी दलीलों को फिट करने के लिए अपनी परिभाषाएं बदल सकता है, और हर चर्चा एक फ़्लेमवर में विकसित होने की गारंटी है।
मैंने स्वयं वर्षों से कई बार व्यक्तिगत रूप से अपनी परिभाषा बदली है और अब उस मुकाम पर पहुँच गया हूँ जहाँ मैं शर्तों को और उपयोगी नहीं मानता। मैं यह भी सोचता था कि कमजोर टाइपिंग (इसकी विभिन्न परिभाषाओं में) शेल स्क्रिप्टिंग में एक जगह है, लेकिन जब भी मुझे बैश और पॉवरशेल में एक ही समस्या को हल करना होता है, तो मुझे दर्द होता है कि मैं कितना गलत था।
याद रखें कि दो प्रमुख अवधारणाएं हैं जो आमतौर पर भ्रमित होती हैं:
एक प्रोग्रामिंग भाषा को गतिशील रूप से टाइप करने के लिए कहा जाता है, जब इसके प्रकार की अधिकांश जाँच को रन-टाइम पर संकलन-समय के विपरीत किया जाता है। डायनेमिक टाइपिंग में, मानों के प्रकार होते हैं लेकिन चर नहीं होते हैं; वह है, एक चर किसी भी प्रकार के मूल्य को संदर्भित कर सकता है।
यहाँ लाभ अक्सर "नए" प्रोग्रामर के रूप में खारिज कर दिया जाता है, लेकिन किसी भी प्रोग्रामर के लिए भी सुविधाजनक हो सकता है:
if (!(arr is Array)) arr = [arr]; // is, instanceof, .constructor ==, whatever
किसी भी मामले में कम कोड जहां आपको अन्यथा एक नया मूल्य डालना या असाइन करना होगा:
if (data is Array)) {
i = data.length; // no i = ((Array)data).length or Array myArr=(Array)data;
}
कमजोर टाइपिंग का मतलब है कि एक भाषा जब इस्तेमाल की जाती है तो (या जाती) प्रकारों को रूपांतरित करती है।
लाभ:
निहित बूलियन मूल्यांकन । किसी भी प्रकार का मूल्यांकन बूलियन के रूप में किया जा सकता है। इसके साइड इफेक्ट्स भी हैं जैसे कि ||
बूलियन में रूपांतरण के बिना असाइनमेंट में इस्तेमाल किया जा सकता है:
var a = param || defaultValue;
फिर से, कम कोड:
var num = 5;
var str = "Hello";
input.innerHTML = input.value = num;
for (var i=0; i < input.value; i++) { ... }
यहां तक कि जावा को पार्टवे जाना था, .toString()
जिसमें ऑब्जेक्ट के साथ संयोजन करते समय निहित कॉल के साथ String
; अन्यथा जावा प्रोग्रामर दिन भर इसे कोसते रहेंगे (लॉग स्टेटमेंट नियंत्रण से बाहर होंगे)।
दोनों परिभाषाएँ http://en.wikipedia.org/wiki/Type_system से हैं । इसने कहा कि मैं इससे बेहतर कर सकता था।
if
ब्लॉक का उपयोग किया जाए या कुछ और अधिक जटिल (यहां तक कि रनटाइम या डायनेमिक) तर्क, अगली पंक्ति कानूनी और त्रुटियों से सुरक्षित होगी।
कमजोर टाइपिंग के लिए मुख्य तर्क प्रदर्शन में से एक है। (यह कहा गया ओपी प्रश्न का उत्तर देने के लिए है)। डायनेमिक बनाम स्थिर, निहित बनाम स्पष्ट के बारे में बहुत अच्छी चर्चा है। आदि।
C सबसे प्रसिद्ध कमजोर टाइप की भाषा है, और यह चर प्रकार की जाँच या संकलन समय की जाँच करने के लिए कोई रन टाइम प्रदर्शन नहीं करती है। संक्षेप में, आप char *
एक int *
और एक को कास्ट कर सकते हैं और भाषा परवाह नहीं करेगी। तो आप ऐसा क्यों करेंगे?
सी प्रोग्रामिंग बहुत ही करीब है जिस तरह से आप चीजों को असेंबली के साथ करते हैं, इसलिए ऐसे समय होते हैं जहां आप केवल एक पते की परवाह करते हैं। किसी void *
कारण के लिए संदर्भ देना या पास करना असामान्य नहीं है । यदि आप जानते हैं कि मेमोरी कैसे आयोजित की जाती है (फिर से एक सी और असेंबली की चिंता), तो आप अपनी ज़रूरत void *
की जानकारी प्राप्त करने के लिए पते के आधार पर कुछ बहुत बढ़िया गणना कर सकते हैं । यह आपको शॉर्ट-सर्किट की प्रक्रिया दे सकता है, उदाहरण के लिए आपको जावा में गुजरना होगा।
जबकि रन-टाइम प्रकार की जाँच में एक असाधारण बिट ओवरहेड नहीं होता है, कई बार ऐसा होता है जब यह महत्वपूर्ण खंड को बहुत धीमा करने के लिए पर्याप्त होता है। मैं इस मामले में ज्यादातर एम्बेडेड प्रोग्रामिंग और रियल टाइम सिस्टम के बारे में सोच रहा हूं।
उस ने कहा, ज्यादातर मामलों में एक मजबूत प्रकार की प्रणाली है जो या तो संकलित समय की जाँच की जाती है या रनटाइम की जाँच की जाती है इससे अधिक बार दर्द होता है।
कमजोर टाइपिंग आम तौर पर newbies के लिए समझ में आसान है, उदाहरण के लिए एक्सेल, जावास्क्रिप्ट और vbscript जैसी चीजों में। आप संभावित त्रुटियों के लिए कुछ विकास की गति का भी व्यापार करते हैं।
विषय पर अच्छा लेख: मजबूत टाइपिंग बनाम मजबूत परीक्षण