लगभग सभी आधुनिक प्रोग्रामिंग भाषाओं में (गो, रस्ट, कोटलिन, स्विफ्ट, स्काला, निम, यहां तक कि पायथन अंतिम संस्करण) प्रकार हमेशा चर घोषणा के बाद आते हैं, और इससे पहले नहीं?
आपका आधार दो मोर्चों पर त्रुटिपूर्ण है:
- नई-ईश प्रोग्रामिंग भाषाएं हैं जो पहचानकर्ता से पहले का प्रकार हैं । उदाहरण के लिए C, D या सीलोन।
- पहचानकर्ता के बाद के प्रकार का होना कोई नई घटना नहीं है, यह कम से कम पास्कल (1968-1969 डिज़ाइन किया गया, 1970 में जारी) पर वापस चला जाता है, लेकिन वास्तव में गणितीय प्रकार के सिद्धांत में उपयोग किया गया था, जो ~ 1902 से शुरू होता है। इसका उपयोग ML (1973), CLU (1974), होप (1970), मोडुला -2 (1977-1985), Ada (1980), Miranda (1985), Caml (1985), Eiffel (1985), Oberon में भी किया गया था। (1986), मोडुला -3 (1986-1988), और हास्केल (1989)।
पास्कल, एमएल, सीएलयू, मोडुला -2 और मिरांडा सभी बहुत प्रभावशाली भाषाएं थीं, इसलिए यह आश्चर्य की बात नहीं है कि इस प्रकार की घोषणाएं लोकप्रिय रहीं।
क्यों x: int = 42
और क्या नहीं int x = 42
? क्या उत्तरार्द्ध पूर्व की तुलना में अधिक पठनीय नहीं है?
पठनीयता परिचित का विषय है। निजी तौर पर, मैं चीनी को अपठनीय मानता हूं, लेकिन जाहिर है, चीनी लोग नहीं करते। स्कूल में पास्कल सीखने के बाद, एफिल, Fask, हास्केल, और स्काला के साथ डबल्ड किया गया और टाइपस्क्रिप्ट, फोर्ट, गो, रस्ट, कोटलिन, इदरिस, फ्रीज, एजडा, एमएल, ओक्लेमल,… को देखा, यह मुझे पूरी तरह से स्वाभाविक लगता है ।
क्या यह सिर्फ एक प्रवृत्ति है या इस तरह के समाधान के पीछे कोई सार्थक कारण हैं?
यदि यह एक प्रवृत्ति है, तो यह बहुत ही स्थायी है: जैसा कि मैंने उल्लेख किया है, यह गणित में सौ साल पीछे चला जाता है।
पहचानकर्ता के बाद टाइप करने के मुख्य लाभों में से एक यह है कि यदि आप चाहते हैं कि यह पता लगाया जाए तो टाइप को छोड़ना आसान है। यदि आपकी घोषणाएं इस तरह दिखती हैं:
val i: Int = 10
फिर इस प्रकार को छोड़ना तुच्छ है और क्या यह इस प्रकार है:
val i = 10
जबकि यदि पहचानकर्ता इस तरह से पहले आता है:
Int i = 10
फिर पार्सर के लिए एक अभिव्यक्ति को एक घोषणा से अलग करना मुश्किल होने लगता है:
i = 10
भाषा डिजाइनर जो समाधान आमतौर पर साथ आते हैं, वह है "मैं एक प्रकार लिखना नहीं चाहता हूं" कीवर्ड को टाइप के बजाय लिखा जाना चाहिए:
var i = 10; // C♯
auto i = 10; // C++
लेकिन यह वास्तव में बहुत मायने नहीं रखता है: आपको मूल रूप से एक प्रकार लिखना होगा जो कहता है कि आप एक प्रकार नहीं लिखते हैं। है ना? इसे छोड़ना बहुत आसान और अधिक समझदार होगा, लेकिन यह व्याकरण को बहुत जटिल बना देता है।
(और चलो सी में फ़ंक्शन पॉइंटर प्रकारों के बारे में भी बात नहीं करते हैं )
उपर्युक्त कई भाषाओं के डिजाइनरों ने इस विषय पर तौला है:
जाओ अकसर किये गए सवाल (यह भी देखें: गो घोषणा सिंटेक्स ):
घोषणाएँ पीछे की ओर क्यों हैं?
वे केवल पीछे की ओर हैं यदि आप सी। में उपयोग किए जाते हैं, तो धारणा यह है कि एक चर को एक अभिव्यक्ति की तरह घोषित किया जाता है, जो एक अच्छा विचार है, जो एक अच्छा विचार है, लेकिन प्रकार और अभिव्यक्ति व्याकरण बहुत अच्छी तरह से मिश्रण नहीं करते हैं और परिणाम भ्रामक हो सकते हैं; फ़ंक्शन पॉइंटर्स पर विचार करें। गो ज्यादातर अभिव्यक्ति को अलग करता है और वाक्यविन्यास को अलग करता है और जो चीजों को सरल बनाता है ( *
संकेत के लिए उपसर्ग का उपयोग करना एक अपवाद है जो नियम को साबित करता है)। सी में, घोषणा
int* a, b;
a
एक सूचक होने की घोषणा करता है लेकिन नहीं b
; में जाओ
var a, b *int
दोनों को संकेत देता है। यह स्पष्ट और अधिक नियमित है। इसके अलावा, :=
कम घोषणा प्रपत्र का तर्क है कि एक पूर्ण चर घोषणा के रूप में एक ही क्रम पेश करना चाहिए :=
ताकि
var a uint64 = 1
के रूप में एक ही प्रभाव है
a := uint64(1)
पार्सिंग को सरल व्याकरण के प्रकारों के लिए एक अलग व्याकरण होने से भी सरल किया जाता है; जैसे कीवर्ड func
और chan
चीजें स्पष्ट रखें।
Kotlin पूछे जाने वाले प्रश्न :
दाईं ओर टाइप घोषणाएं क्यों हैं?
हमारा मानना है कि यह कोड को अधिक पठनीय बनाता है। इसके अलावा, यह कुछ अच्छी वाक्य रचना सुविधाओं को सक्षम करता है। उदाहरण के लिए, टाइप एनोटेशन को छोड़ना आसान है। स्काला भी अच्छी तरह से साबित हो गया है कि यह कोई समस्या नहीं है।
स्काला में प्रोग्रामिंग :
जावा से प्रमुख विचलन जावा में " variable: Type
" के बजाय " " प्रकार के एनोटेशन के लिए सिंटैक्स की चिंता करता है Type variable
। स्काला का पोस्टफिक्स टाइप सिंटैक्स पास्कल, मोडुला -2, या एफिल जैसा दिखता है। इस विचलन का मुख्य कारण टाइप इंट्रैक्शन के साथ करना है, जो अक्सर आपको चर के प्रकार या किसी विधि के रिटर्न प्रकार को छोड़ देता है। " variable: Type
" सिंटैक्स का उपयोग करना आसान है - बस बृहदान्त्र और प्रकार को छोड़ दें। लेकिन सी-स्टाइल में " Type variable
" सिंटैक्स आप केवल टाइप को छोड़ नहीं सकते हैं - अब परिभाषा शुरू करने के लिए कोई मार्कर नहीं होगा। लापता प्रकार के लिए प्लेसहोल्डर बनने के लिए आपको कुछ वैकल्पिक कीवर्ड की आवश्यकता होगी (C, 3.0, जो इस प्रकार के उपयोग के var
लिए कुछ प्रकार की खोज करता है )। इस तरह के एक वैकल्पिक कीवर्ड को स्काला के दृष्टिकोण से अधिक तदर्थ और कम नियमित लगता है।
नोट: सीलोन के डिजाइनरों ने यह भी प्रलेखित किया कि वे उपसर्ग प्रकार के सिंटैक्स का उपयोग क्यों करते हैं :
उपसर्ग प्रकार के एनोटेशन के बजाय उपसर्ग
घोषणा के नाम के बाद उन्हें लगाने में पास्कल और एमएल के बजाय, आप पहले प्रकार के एनोटेशन डालने में सी और जावा का पालन क्यों करते हैं?
क्योंकि हम यह सोचते हैं:
shared Float e = ....
shared Float log(Float b, Float x) { ... }
क्या यह पढ़ने में बहुत आसान है:
shared value e: Float = ....
shared function log(b: Float, x: Float): Float { ... }
और हम बस यह नहीं समझते हैं कि कोई और कैसे अन्यथा सोच सकता है!
व्यक्तिगत रूप से, मैं उनके "तर्क" को दूसरों की तुलना में बहुत कम आश्वस्त पाता हूं।