2016-03-13 6 views
15

कोटलिन और ग्रोवी बहुत ही समान भाषाओं के साथ बहुत ही समान भाषाओं को देखते हैं यदि हम ग्रोवी को स्थिर रूप से संकलित करते हैं। नल सुरक्षा के अलावा कौन सी विशेषताएं, कोटलिन में ग्रोवी में गायब हैं?कौन सा कोटलिन विशेषताएं स्थिर रूप से संकलित ग्रोवी में उपलब्ध नहीं हैं?

+0

मैंने इसे कम राय-आधारित बनाने के लिए प्रश्न को फिर से लिखने का प्रयास किया। मैं माफी माँगता हूं अगर यह अभी भी स्टैक ओवरफ़्लो के लिए स्वीकार्य नहीं है। –

उत्तर

19

कोटलिन एक जेवीएम भाषा है, जो आईएमओ जावा पर सुविधाओं और एकरूपता में सुधार करने की कोशिश कर रहा है, जबकि अनिवार्य और स्थैतिक शेष है। गतिशील जाने का फैसला किए जाने के अलावा ग्रोवी की एक समान अवधारणा है। नतीजतन, कई भाषा विशेषताएं समान होंगी। चूंकि ग्रूवी एक गतिशील भाषा के रूप में डिजाइन किया गया था, और @CompileStatic, जबकि एक महान एनोटेशन (मैं इसे एक बहुत का उपयोग करें), जोड़ा गया है:

यहाँ कुछ मतभेद मैं की

  • गतिशील बनाम स्टेटिक बारे में पता कर रहा हूँ कर रहे हैं बाद में। इसकी सुविधा थोड़ा बोल्ड लगती है, और यह लोगों को स्थिर तरीके से कोड करने के लिए लागू नहीं करती है। यह हर जगह उपयोग करने योग्य नहीं है (उदाहरण के लिए मेरे स्पॉक परीक्षण उनके साथ संकलन करने में असफल लगते हैं)। कभी-कभी ग्रोवी पर इसके साथ भी अब भी कुछ अजीब गतिशील व्यवहार लगता है। कोटलिन 100% स्थिर है, और गतिशील एक विकल्प नहीं है।

हालांकि कई अन्य विशेषताएं हैं। मैं आपको संदर्भ को देखने की अनुशंसा करता हूं, और आप कुछ और उदाहरण दे सकते हैं उदा। https://kotlinlang.org/docs/reference/

  • डाटा कक्षाएं - एक प्रति समारोह (स्काला में मामला वर्गों की तरह एक बिट) के साथ संक्षिप्त
  • अशक्त सुरक्षा जाँच आपने उल्लेख किया है (जो एक बड़ा समर्थक है)
  • आइटम संहार करने की क्षमता। वैल (नाम, आयु) = व्यक्ति
  • हाई-ऑर्डर फ़ंक्शंस, जैसे "मजेदार डस्टफफ (बॉडी: इंट -> टी)): टी"। जो ग्रोवी क्लोजर आईएमओ से काफी बेहतर हैं।
  • प्रकार की जांच और स्मार्ट डाले (बहुत स्काला के समान) अच्छा कर रहे हैं: एक ही तरह से स्काला भी वर्गों से स्थिर तरीकों को दूर करने की कोशिश करता है, https://kotlinlang.org/docs/reference/typecasts.html
  • साथी वस्तुओं, Kotlin एक ही बात की कोशिश करता है।
  • उत्तराधिकारी को प्रतिबंधित करने के लिए मुहरबंद वर्ग (फिर स्कैला में कुछ समान है)
  • "कुछ भी नहीं" उप प्रकार, जहां सबकुछ इसका एक सुपरटेप है। (स्कैला में एक और महत्वपूर्ण अवधारणा)।
  • जब बुनियादी पैटर्न मिलान के लिए भाव: https://kotlinlang.org/docs/reference/control-flow.html

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

एक और प्लस, आईडीई निर्माता द्वारा किया जा रहा है, संकलक बहुत तेज़ है और इसमें बहुत अच्छा आईडीई समर्थन है। यह नहीं कह रहा है कि ग्रोवी के पास अच्छा समर्थन नहीं है, लेकिन मेरी वर्तमान परियोजना को संकलित करने में काफी समय लगता है, और रीफैक्टर विधि हमेशा मानती है कि आप एक गतिशील फैशन में कोडिंग कर रहे हैं।

मैं आपको सलाह देता हूं कि आपको यह देखने के लिए कोनों को आज़माएं कि आप कौन सी भाषा पसंद करते हैं और यह कैसे ग्रोवी (https://github.com/Kotlin/kotlin-koans) की तुलना करता है।

+2

ग्रोवी में मुझे खोने वाली एक अन्य कोटलिन सुविधा को पैरामीटर नाम दिया गया है। कुछ हद तक इसे अनुकरण करने के लिए नक्शा फैलाना संभव है, लेकिन नामित पैराम के साथ मानक पैरा को गठबंधन करने का कोई तरीका प्रतीत नहीं होता है: 'someMethod ("foo", 10, रंग: लाल, verbose: true) ' –

+0

"कोटलिन 100% स्टेटिक है, और गतिशील एक विकल्प नहीं है" कोटलिन के पास प्रकार का अनुमान है (गोलांग भी है) ताकि आप गतिशील तरीके से कोटलिन में प्रोग्राम कर सकें। कोटलिन को स्क्रिप्टिंग भाषा के रूप में उपयोग नहीं किया जा सकता है क्योंकि यह हमेशा संकलित होता है और ग्रोवी की तुलना में यह मुख्य अंतर है। –

+0

इस मामले में, "स्थैतिक" संकलन समय पर संकलन और प्रकार निर्धारित/लॉक होने का जिक्र कर रहा है। जैसे var s = "हैलो"; एस = 1; कोटलिन में संकलन करने में असफल रहेगा। डायनामिक का अर्थ है कि जानकारी जांच रनटाइम पर होती है। उदा। ग्रोवी में आप यह कर सकते हैं: def s = "hello"; s = 1; def t = s + 1 और यह ठीक/संकलित होगा। मुझे लगता है कि कोटलिन स्थिर है कि कथन अभी भी सही है, भले ही यह और ग्रोवी दोनों प्रकार का अनुमान है। जावा में टाइप अनुमान के तत्व भी हैं, लेकिन यह निश्चित रूप से एक स्थाई रूप से टाइप की गई भाषा है: https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html –

4

कोटलिन सांख्यिकीय रूप से टाइप की गई भाषा के रूप में डिज़ाइन किया गया है, जिसमें महान प्रकार की प्रणाली और स्थिर रूप से टाइप की गई भाषा के अन्य लाभ हैं।ग्रोवी - पहली जगह एक गतिशील रूप से टाइप की गई भाषा है, और केवल तब - स्थिर रूप से।

जब आप ग्रोवी में स्थिर संकलन को सक्षम करते हैं तो आपको सिंटैक्स चीनी के साथ जावा मिलता है। दूसरी तरफ - कोटलिन, उनके टाइप-सिस्टम में, दो प्रकार के संदर्भ हैं: nullable and nonnullable, ताकि आप कम एनपीई के साथ कोड लिख सकें। यदि आप केवल एक सुविधा के बारे में पूछ रहे हैं - यही वह है।

कोटलिन की दूसरी महान विशेषता - यह किसी भी अंतर्निहित रूपांतरण नहीं करता है, दूसरी तरफ - ग्रोवी पूरी तरह से डबल से बड़े और दूसरे में परिवर्तित हो जाती है।

लेकिन kotlin है एक बहुत अन्य सुविधाओं, smart casts, ADT (doc), type-safe builders, शून्य लागत कपोल-कल्पना और अंत में महान आईडीई समर्थन की तरह।

इसके अलावा मुझे ग्रोवी के प्रकार-अनुमान की गुणवत्ता के बारे में निश्चित नहीं है (उदाहरण के लिए हमें additional annotations, मेह की आवश्यकता है), लेकिन कोटलिन प्रकार-अनुमान कार्य में प्रत्येक आकर्षण की भाषा में किसी भी टिप्पणी के बिना एक आकर्षण की तरह है।

तो कोरोलीन में प्रथम रूप से टाइप किए गए संकलन - ग्रोवी में प्रथम श्रेणी के नागरिक - नहीं।

+0

कोटलिन में टाइप अनुमान (गोलांग भी है) ताकि आप गतिशील तरीके से Kotlin में कार्यक्रम कर सकते हैं। कोटलिन को स्क्रिप्टिंग, व्याख्या की गई भाषा के रूप में उपयोग नहीं किया जा सकता है क्योंकि यह हमेशा संकलित होता है और यह ग्रोवी की तुलना में मुख्य अंतर है। –

+0

ग्रोवी एक गतिशील भाषा है इसलिए भाषा कोर में टाइप अनुमान अंतर्निहित है। आपको इसके बारे में पता होना चाहिए। यह गतिशील टाइप की गई भाषा परिभाषा में अंतर्निहित है। –

+0

@MarekMarczak टाइप अनुमान के द्वारा आपका क्या मतलब है? ग्रोवी में आपके पास गतिशील प्रकार होते हैं, और केवल रनटाइम में टाइप करते हैं (कई मामलों में)। इसके अलावा ग्रोवी में आपके पास "विधि अनुपलब्ध" जैसी चीजें हैं जो धीरे-धीरे बढ़ती हैं। – IRus

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