2016-03-13 12 views
5

यदि आप जंग, गो, स्विफ्ट, टाइपस्क्रिप्ट और कुछ अन्य लोगों को देखते हैं, और उन्हें सी/सी ++ से तुलना करें, तो पहली बात यह है कि मैंने देखा कि किस तरह के प्रकार पदों को स्थानांतरित कर चुके हैं।नई प्रोग्रामिंग भाषा दूसरी तरफ स्थानांतरण प्रकार क्यों हैं?

int one = 1; 

को comparsion में:

let one:int = 1; 

मेरा प्रश्न: क्यों?

मेरे लिए, व्यक्तिगत रूप से, यह अजीब पढ़ने प्रकार विनिर्देशक है कि अब तक, लाइन में के बाद से मैं बहुत उन्हें बाईं तरफ जा रहा करने के लिए इस्तेमाल कर रहा हूँ। और इस आधुनिक/नई भाषाएँ सिर्फ एक है, लेकिन कई कि मेज पर कर रहे हैं के साथ ऐसा नहीं किया जा रहा है - तो यह मुझे क्यों प्रकार विनिर्देशक ले जाया जा रहा है पर दिलचस्पी।

+2

देखें कि यूएमएल में किस तरह के प्रकार हैं, जब सी ++ प्रभावशाली यूएमएल इस अलग क्रम में प्रकार डाल रहा था। –

+2

हम्म ... उन प्रश्नों के उत्तर में से कोई भी करी हॉवर्ड आइसोमोर्फिज्म का उल्लेख नहीं करता है (जहां 'ए: ए' का मतलब होगा * ए प्रस्ताव का एक सबूत है * या * ए टाइप ए * है)। अर्थात। इस अभ्यास के लिए सिद्धांत टाइप करने वाले वास्तविक कारण होंगे। – JGreenwell

उत्तर

22

मेरे लिए, व्यक्तिगत रूप से, यह अजीब पढ़ने प्रकार विनिर्देशक है कि जब मैं बहुत उन्हें छोड़ दिया

पर किया जा रहा है और अंग्रेजी भाषा के लिए सबसे अच्छा है क्योंकि यह है करने के लिए इस्तेमाल कर रहा हूँ अब तक, लाइन में केवल भाषा जहां शब्दों को उसी क्रम में बोली जाती है, मैं उन्हें सोचता हूं। एक आश्चर्य है कि क्यों कोई भी गलत क्रम में शब्दों के साथ फ्रांसीसी बोलता है!

तो यह मुझे इस बात पर रूचि देता है कि टाइप विनिर्देशकों को क्यों स्थानांतरित किया जा रहा है - और यह केवल एक के साथ मामला नहीं है, लेकिन मेज पर मौजूद कई आधुनिक/नई भाषाएं हैं।

मुझे लगता है कि आप इस पैटर्न का उपयोग करने वाली कई पुरानी भाषाओं के अस्तित्व को अनदेखा करते हैं। विजुअल बेसिक (1 99 0 के मध्य) तुरंत दिमाग में आता है।

Function F(x As String) As Object 

पास्कल, 1970 के दशक:

var 
    Set1 : set of 1..10; 

सीधे शब्दों में टाइप लैम्ब्डा पथरी, एक प्रोग्रामिंग भाषा कंप्यूटर से पहले का आविष्कार किया, 1940 के दशक में:

λx:S.λy:T:S-->T-->S 

पूरे एमएल परिवार। मैं जा सकता थाबहुत सारी पुरानी भाषाएं हैं जो सही सम्मेलन के प्रकारों का उपयोग करती हैं।

लेकिन हम 1 9 40 के दशक से कहीं अधिक पुराने हो सकते हैं। जब आप गणित f : Q --> R में कहते हैं, तो आप बाईं ओर फ़ंक्शन का नाम डाल रहे हैं - प्रकार - क्यू से आर का नक्शा - दाईं ओर। जब आप x∈R कहते हैं कि x वास्तविक है, तो आप सही प्रकार को टाइप कर रहे हैं। शाब्दिक सदियों द्वारा बाएं में बाईं ओर टाइप करें "दाईं ओर टाइप करें" टाइप करें। यह कुछ भी नया नहीं है!

वास्तव में वाक्य रचना "बाईं तरफ के प्रकार के" अजीब एक है! यह आपके लिए स्वाभाविक प्रतीत होता है क्योंकि आपने ऐसी भाषा का उपयोग किया है जो आपके प्रारंभिक वर्षों में इस सम्मेलन का उपयोग करता है।

सही वाक्य रचना पर प्रकार कई कारणों से, ज्यादा बेहतर है। बस कुछ:

var x : int = 1; 
function y(z : int) : string { ... }  

पर जोर देती है कि एक्स एक चर और y एक समारोह है। यदि प्रकार बाईं ओर आता है और आप int y देखते हैं तो आप नहीं जानते कि यह बाद में एक फ़ंक्शन या चर है। यह मनुष्यों के पढ़ने के लिए कार्यक्रम कठिन बनाता है, जो काफी खराब है। एक कंपाइलर डेवलपर के रूप में, मैं आपको बताता हूं कि यह काफी असुविधाजनक है कि प्रकार सी # में बाईं ओर आता है। (मैं सी # सिंटैक्स प्रकारों की स्थिति से कैसे निपटता हूं, इस बारे में कई असंगतताओं को इंगित कर सकता हूं।)

एक और कारण: "दाईं ओर टाइप करें" वाक्यविन्यास में आप प्रकार वैकल्पिक बना सकते हैं। आप

var x : int = 1; 

है तो आप आसानी से कह सकते हैं "ठीक है, हम पूर्णांक अनुमान लगा सकते हैं, और इसलिए इसे समाप्त"

var x = 1; 

लेकिन अगर पूर्णांक बाईं तरफ है, तो आप क्या करते हैं ?

इसे परिवर्तित करना: आप टाइपस्क्रिप्ट का उल्लेख करते हैं। टाइपस्क्रिप्ट धीरे-धीरे टाइप की गई जावास्क्रिप्ट है। जावास्क्रिप्ट में सम्मेलन पहले से ही है

var x = 1; 
function f(y) { } 

यह देखते हुए कि, स्पष्ट रूप से यह सही पर वैकल्पिक प्रकार के तत्वों को पेश करने की तुलना में यह "var बनाने के लिए हो सकता है, एक पूरे के रूप दोनों मौजूदा कोड, और भाषा को संशोधित करने के लिए आसान है "और" फ़ंक्शन "कीवर्ड एक प्रकार से प्रतिस्थापित होते हैं।

भी स्थिति पर विचार करें। जब आप कहते हैं:

int x = 1; 

तो दो चीजें हैं जो अनुरूप होना चाहिए - प्रकार और प्रारंभकर्ता - के रूप में दूर के रूप में वे संभवतः कर सकते हैं। var x : int = 1; के साथ वे एक तरफ हैं। और

int f() { 
    ... 
    ... 
    return 123; 
} 

हमें क्या मिला है? वापसी जितनी जल्दी संभव हो सके है, तो फ़ंक्शन घोषणा जितनी दूर संभव हो सके के प्रकार को स्थानांतरित करती है? "सही वाक्यविन्यास के प्रकार के साथ हमारे पास यह अच्छा प्रवाह है:

function f(x : string) : int 
{ ... ... ... return 123; } 

फ़ंक्शन कॉल में क्या होता है?घोषणा का प्रवाह अब नियंत्रण के प्रवाह के समान है: बाईं ओर की चीजें - औपचारिक मानकों की शुरुआत - पहले होता है, और दाईं ओर की चीजें - वापसी मूल्य का उत्पादन - आखिरी होता है।

मैं कुछ अतिरिक्त लंबाई पर जा सकता हूं कि सी शैली पूरी तरह से पीछे की ओर कैसे जाती है, लेकिन देर हो चुकी है। संक्षेप में: सबसे पहले, दाईं ओर टाइप करें लगभग हर संभव तरीके से बेहतर है, और दूसरा, यह बहुत पुराना है। इस सम्मेलन का उपयोग करने वाली नई भाषाएं परंपरागत अभ्यास के अनुरूप हैं।

+1

यह कभी भी सबसे अच्छा SO जवाब होना चाहिए। मैं सही होने के अधिकारों के साथ सहमत नहीं हो सकता, लेकिन मैं निश्चित रूप से यहां आपके अंक प्राप्त करता हूं। गंभीरता से, महान उत्तर - इच्छा है कि मैं इसे दो बार स्वीकार कर सकता हूं :)। असल में मैं लगभग अंधा हूं। तो स्क्रीन आवर्धन के साथ दृष्टि का मेरा क्षेत्र छोटा है। तो जब मैं बाईं ओर के प्रकारों के साथ पढ़ता हूं, तो मुझे पता है कि क्या उम्मीद करनी है। मैं चीजों को उनके प्रकार से भी देख सकता हूं। लेकिन - यह लंबे समय तक एक निजी चीज़ है। :) –

+0

चूंकि आपने इसे सुझाव दिया है, इसलिए मैं आपके लिए सी # सिंटैक्स में इस कारणों पर असंगतता का विस्तार करना चाहूंगा, या सी शैली को पीछे की तरफ क्यों लेना चाहिए इसके अतिरिक्त कारण। किसी भी मामले में आकर्षक जवाब। – Asik

+1

@Asik: ठीक है बस भाषा में दिखाई देने वाले सभी स्थानों के प्रकार सूचीबद्ध करना शुरू करें। सी # में 'int x' है, लेकिन 'कक्षा डी: बी' भी है। और 'डबल एम (इंट एक्स) 'लेकिन' फनक '। और 'int [] 'लेकिन' 'सूची भी। और '(int) x' लेकिन ' (x)' कास्ट भी करें। आम तौर पर एक प्रकार की घोषणा हमेशा इसके उपयोग के बाईं ओर दिखाई देती है, लेकिन सामान्य तरीकों से घोषित चीज बाएं 'टी एम () 'और अन्य पर दिखाई दे सकती है। सी # में कोई निरंतर पालन नियम नहीं है जहां एक प्रकार दिखाई देता है। –

1

यदि आप कोई वेब खोज करते हैं, तो नए प्रश्नों के डेवलपर्स को अपने प्रश्नों में इस प्रश्न का उत्तर देना मुश्किल नहीं है। उदाहरण के लिए, गो डेवलपर्स के पास FAQ entry है, साथ ही उनके भाषा ब्लॉग पर entire article है। कई प्रोग्रामर सी-जैसी भाषाओं में इतने उपयोग किए जाते हैं कि कोई भी विकल्प अजीब लगता है, इसलिए यह प्रश्न बहुत कुछ आता है ...

हालांकि, आप तर्क दे सकते हैं कि सी प्रकार की घोषणा वाक्यविन्यास स्वयं ही अजीब है। संकेत और समारोह प्रकार के लिए पैटर्न जैसी सुविधाओं बहुत जल्दी अजीब और unintuitive हो जाते हैं, और के हिस्से के रूप में विकसित नहीं किया गया है, या में, अधिक सामान्य पैटर्न मिलान सुविधा के किसी भी प्रकार। अपनेपन के लिए, वे कई लगातार सी जैसी भाषाओं से अधिक या कम डिग्री करने के लिए अपनाया गया है, लेकिन सुविधा अपने आप में एक विफल प्रयोग हम पश्च संगतता की खातिर साथ रहने के लिए है कि अधिक के रूप में बाहर चिपक जाता है। सी प्रकार वाक्य रचना से अपने आप को निकालना की

एक लाभ यह है कि यह आसान सिर्फ घोषणाओं से अधिक स्थानों में प्रकार का उपयोग करने बनाता है। यदि आप कहीं भी समझ में आसानी से प्रकार रख सकते हैं, तो आप Swift documentation में वर्णित अनुसार, अपने प्रकारों को एनोटेशन के रूप में उपयोग कर सकते हैं।

+2

मैं यह नहीं कहूंगा कि प्रयोग * असफल * है; असफल प्रयोग वह है जिसे हमने कुछ भी नहीं सीखा। उम्मीद है कि हमने इस प्रयोग से सीखा है कि मानव-पठनीय प्रकार की टिप्पणियां महत्वपूर्ण हैं, और एक प्रकार के एनोटेशन सिंटैक्स के डिजाइन तत्वों को संकलित लेखकों और डेवलपर्स को समान रूप से लाभ मिलता है। –

+0

उत्तर के लिए धन्यवाद - और लिंक! उन्हें थोड़ा सा पढ़ा जाएगा। दिलचस्प दृष्टिकोण भी। लेकिन मैं @Eric से सहमत हूं - यह कुछ अजीब गेंदों के लिए वास्तव में एक असफल प्रयोग नहीं है - जैसे कि: पी - यह अब और अधिक प्रकृति महसूस करता है, और इसके अपने फायदे हैं, दूसरी तरफ तुलना में छोटे, पाठ्यक्रम। वैसे भी, महान जवाब - धन्यवाद! –

संबंधित मुद्दे