कोटलिन बनाम जावा - दोनों में क्या अंतर है?

लेखक: John Stephens
निर्माण की तारीख: 24 जनवरी 2021
डेट अपडेट करें: 1 जुलाई 2024
Anonim
कोटलिन बनाम जावा | Android विकास के लिए जावा या कोटलिन | कोटलिन ट्यूटोरियल | एडुरेका
वीडियो: कोटलिन बनाम जावा | Android विकास के लिए जावा या कोटलिन | कोटलिन ट्यूटोरियल | एडुरेका

विषय


जावा अब भी पहली प्रोग्रामिंग भाषा हो सकती है जो एंड्रॉइड के बारे में सोचते समय आपके दिमाग में आती है, लेकिन आप नहीं करते हैं है Android विकास के लिए जावा का उपयोग करने के लिए। वास्तव में, कोटलिन अब Google का हैपसंदीदाAndroid के लिए आधिकारिक भाषा!

जावा के बारे में अधिक जानने के लिए मेक एंड्रॉइड ऐप में जावा कोर्स के लिए एक मुफ्त परिचयात्मक प्राप्त करें।

आज, कोटलिन के साथ एंड्रॉइड स्टूडियो जहाज बिल्ट-इन का समर्थन करते हैं, इसलिए कोटलिन कोड को समझने वाला एंड्रॉइड प्रोजेक्ट बनाना उतना ही आसान है जितना कि एंड्रॉइड स्टूडियो के प्रोजेक्ट निर्माण विज़ार्ड में एक चेकबॉक्स का चयन करना। समर्थन बहुत अधिक समय के लिए बढ़ गया है, इस बात के लिए कि यह निर्णय अब मुख्य रूप से वरीयता के लिए आता है।

लेकिन अगर आप जावा से कोटलिन में स्विच करते हैं, तो आप वास्तव में क्या हासिल कर रहे हैं? कोटलिन के पास क्या विशेषताएं हैं, जो कि जावा और इसके विपरीत नहीं है?

इस लेख में, हम कोटलिन बनाम जावा के सभी प्रमुख अंतरों को देख रहे हैं।

कोटलिन बनाम जावा, बाद में अधिक रसीला कोड प्रदान करता है - बिना findViewByIds के

यदि आप एक कोटलिन वर्ग और एक जावा वर्ग की तुलना करते हैं जो समान कार्य कर रहे हैं, तो कोटलिन वर्ग आम तौर पर बहुत अधिक संक्षिप्त होगा, लेकिन विशेष रूप से एक क्षेत्र है जहां कोटलिन गंभीरता से बॉयलरप्लेट कोड की मात्रा को कम कर सकता है जिसे आपको लिखने की आवश्यकता है: findViewByIds.


कोटलिन एंड्रॉइड एक्सटेंशन आपको अपनी गतिविधि फ़ाइल में एक दृश्य के संदर्भ को आयात करने की अनुमति देता है, जिस बिंदु पर आप उस दृश्य के साथ काम कर पाएंगे, हालांकि यह गतिविधि का हिस्सा था। परिणाम? आपको फिर से एक और findViewById तरीका नहीं लिखना होगा!

इससे पहले कि आप इन एक्सटेंशनों का उपयोग कर सकें, आपको अपने मॉड्यूल-स्तर build.gradle फ़ाइल (प्लगइन लागू करें: 'kotlin-android-एक्सटेंशन') पर एक अतिरिक्त प्लगइन जोड़ने की आवश्यकता होगी, लेकिन इसके बाद आप दृश्य आयात करना शुरू करने के लिए तैयार हैं, के लिए उदाहरण यदि आपकी गतिविधि_main.xml फ़ाइल में ID textView के साथ एक TextView सम्‍मिलित है, तो आप अपनी गतिविधि में निम्‍न जोड़ेंगे:

आयात kotlinx.android.synthetic.main.activity_main.textView

तब आप केवल इसकी ID का उपयोग करके इस TextView का उपयोग कर सकते हैं:

textView.setText ("हैलो वर्ल्ड")

ये है बहुत जावा समतुल्य से अधिक सफल:

TextView टेक्स्ट = (TextView) findViewById (R.id.textView); text.setText ("हैलो वर्ल्ड");

कोटलिन डिफ़ॉल्ट रूप से सुरक्षित है

NullPointerException जावा डेवलपर्स के लिए हताशा का एक बड़ा स्रोत है। जावा आपको किसी भी चर को अशक्त करने की अनुमति देता है, लेकिन यदि आप एक ऑब्जेक्ट संदर्भ का उपयोग करने का प्रयास करते हैं, जिसमें एक शून्य मान है, तो अपने आप को एक NullPointerException से मुठभेड़ करने के लिए ब्रेस करें!


यह भी पढ़े: Android परिचय के लिए Kotiln

कोटलिन में, सभी प्रकार गैर-अशक्त (अशक्त मान रखने में असमर्थ) हैं। यदि आप अपने कोटलिन कोड में नल लगाने या वापस करने का प्रयास करते हैं, तो यह संकलन-समय पर विफल हो जाएगा, इसलिए निम्न में से कोई भी पंक्ति संकलित नहीं होगी:

वैल नाम: स्ट्रिंग = अशक्त

fun getName (): स्ट्रिंग = अशक्त

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

वैल नंबर: इंट? = अशक्त

इससे कोटलिन में NullPointerException का सामना करना लगभग असंभव हो जाता है - वास्तव में, यदि आप इस अपवाद का सामना करते हैं, तो संभावना यह है कि आपने स्पष्ट रूप से Kotlin को एक को फेंकने के लिए कहा है, या NullPointerException बाहरी जावा कोड से उत्पन्न हो रही है।

विस्तार कार्य

कोटलिन डेवलपर्स को नई कार्यक्षमता के साथ एक वर्ग का विस्तार करने की क्षमता देता है, जो कि आदर्श है अगर आपको लगता है कि एक वर्ग हमेशा एक महत्वपूर्ण तरीका याद कर रहा है!

ये 'एक्सटेंशन फ़ंक्शंस' जावा में उपलब्ध नहीं हैं, हालांकि वे अन्य प्रोग्रामिंग भाषाओं में उपलब्ध हैं जिनका उपयोग आप Android विकास के लिए कर सकते हैं, जैसे C #।

आगे पढ़िए: शुरुआती के लिए जावा ट्यूटोरियल

आप उदाहरण के लिए जिस फ़ंक्शन (by स्टाइलस्ट्रिंग ’) का निर्माण कर रहे हैं, उस नाम के लिए (जैसे extension स्ट्रिंग’) का विस्तार करना चाहते हैं, आप एक एक्सटेंशन फ़ंक्शन बनाएं।

मज़ा String.styleString (): स्ट्रिंग {// स्ट्रिंग को स्टाइल करें और फिर इसे वापस लौटाएं //}

आप तब इस फ़ंक्शन को विस्तारित वर्ग के उदाहरणों पर, के माध्यम से कॉल कर सकते हैं। अंकन, जैसे कि यह उस वर्ग का हिस्सा था:

myString.styleString ()

Coroutines प्रथम श्रेणी के नागरिक हैं

जब भी आप एक लंबे समय से चलने वाले ऑपरेशन की शुरुआत करते हैं, जैसे कि नेटवर्क I / O या CPU-गहन कार्य, तब तक कॉलिंग थ्रेड ब्लॉक हो जाता है जब तक कि ऑपरेशन पूरा नहीं हो जाता। चूंकि एंड्रॉइड डिफ़ॉल्ट रूप से सिंगल-थ्रेडेड है, जैसे ही आप मुख्य थ्रेड को ब्लॉक करते हैं, आपके ऐप का UI फ्रीज होने वाला है, और जब तक ऑपरेशन पूरा नहीं हो जाता, तब तक यह अनुत्तरदायी रहेगा।

जावा में, समाधान पारंपरिक रूप से एक पृष्ठभूमि धागा बनाने के लिए किया गया है जहां आप इस गहन या लंबे समय तक चलने वाले काम को कर सकते हैं, लेकिन कई थ्रेड्स को प्रबंधित करने से जटिल, त्रुटि-प्रवण कोड हो सकता है, और एक नया धागा बनाना एक महंगा ऑपरेशन है।

जब आप कोटलिन में अतिरिक्त धागे बना सकते हैं, तो आप कोरटाइन का भी उपयोग कर सकते हैं। थ्रेड को अवरुद्ध किए बिना एक निश्चित बिंदु पर निष्पादन को निलंबित करके लंबे समय तक चलने वाले और गहन कार्य करते हैं, और फिर इस कार्य को बाद के बिंदु पर फिर से शुरू करते हैं, संभवतः दूसरे धागे पर। यह आपको गैर-अवरुद्ध अतुल्यकालिक कोड बनाने की अनुमति देता है दिखता है तुल्यकालिक, और इसलिए अधिक स्पष्ट, संक्षिप्त और मानव पठनीय है। Coroutines भी स्टैकलेस हैं, इसलिए उनके पास थ्रेड्स की तुलना में कम मेमोरी का उपयोग होता है, और वे एसिंक्रोनस नॉन-ब्लॉकिंग प्रोग्रामिंग की अतिरिक्त शैलियों, जैसे कि async / प्रतीक्षा का द्वार खोलते हैं।

कोई अपवाद नहीं हैं

कोटलिन ने अपवादों की जाँच नहीं की है, इसलिए आपको किसी अपवाद को पकड़ने या घोषित करने की आवश्यकता नहीं है।

क्या यह कुछ ऐसा है जो आपको कोटलिन की ओर खींचता है, या आप जावा के साथ रहना चाहते हैं, यह आपके द्वारा जांचे गए अपवादों के बारे में आपकी राय पर निर्भर करेगा, क्योंकि यह एक ऐसी विशेषता है जो डेवलपर समुदाय को विभाजित करती है। यदि आप अपने जावा कोड को अव्यवस्थित करने की कोशिशों / पकड़ने वाले ब्लॉकों से बीमार हैं, तो आप इस चूक से खुश होने जा रहे हैं, हालांकि यदि आप पाते हैं कि चेक किए गए अपवाद आपको त्रुटि सुधार के बारे में सोचने के लिए प्रोत्साहित करते हैं और अंततः आपको और अधिक मजबूत बनाने की ओर धकेलते हैं। कोड, तो आप इसे एक ऐसे क्षेत्र के रूप में देख सकते हैं जहाँ जावा के पास कोटलिन है।

प्रतिनिधिमंडल के लिए मूल समर्थन

कोटलिन, जावा के विपरीत, "प्रथम श्रेणी प्रतिनिधिमंडल (कभी-कभी निहित प्रतिनिधि के रूप में जाना जाता है) के माध्यम से" विरासत पर रचना "डिजाइन पैटर्न का समर्थन करता है। प्रतिनिधिमंडल वह जगह है जहां एक प्राप्त वस्तु एक दूसरे प्रतिनिधि ऑब्जेक्ट के लिए संचालन को दर्शाती है, जो मूल संदर्भ के साथ एक सहायक वस्तु है।

कोटलिन का वर्ग प्रतिनिधिमंडल विरासत का एक विकल्प है जो कई विरासत का उपयोग करना संभव बनाता है। इस बीच, कोटलिन की प्रत्यायोजित संपत्तियां कोड के दोहराव को रोकने में मदद करती हैं, उदाहरण के लिए यदि आपको कई संपत्तियों और गेटर्स के लिए समान कोड का पुन: उपयोग करने की आवश्यकता है, तो आप इस कोड को एक प्रत्यायोजित संपत्ति में निकाल सकते हैं। प्रॉपर्टी प्रतिनिधि को getValue ऑपरेटर फ़ंक्शन को परिभाषित करने की आवश्यकता है और वैकल्पिक रूप से, सेटवैल्यू ऑपरेटर:

वर्ग प्रतिनिधि {संचालक मज़ा getValue (...) ... ...}} ऑपरेटर मज़ा सेटवैल्यू (...) ... ...}}}

फिर, जब आप कोई संपत्ति बनाते हैं, तो आप घोषणा कर सकते हैं कि इस विशेष संपत्ति के लिए गेट्टर और सेटर फ़ंक्शन किसी अन्य श्रेणी द्वारा नियंत्रित किए जाते हैं:

वर्ग MyClass {var property: String by Delegate ()}

डेटा कक्षाएं

किसी प्रोजेक्ट के लिए ऐसे कई वर्ग होना असामान्य नहीं है जो डेटा को रखने के अलावा कुछ नहीं करते हैं। जावा में, आप खुद को इन वर्गों के लिए बहुत सारे बॉयलरप्लेट कोड लिखते हुए पाएंगे, भले ही कक्षाओं में बहुत कम कार्यक्षमता हो। आमतौर पर, आपको एक निर्माता, डेटा को संग्रहीत करने के लिए फ़ील्ड, प्रत्येक फ़ील्ड के लिए गेट्टर और सेटर फ़ंक्शन, प्लस हैशकोड (), बराबर () और स्ट्रींग () फ़ंक्शन को परिभाषित करने की आवश्यकता होगी।

कोटलिन में, यदि आप अपनी कक्षा की परिभाषा में ’डेटा’ कीवर्ड शामिल करते हैं, तो कंपाइलर आपके लिए यह सभी कार्य करेगा, जिसमें सभी आवश्यक गेटर्स और सेटरर्स को शामिल करना शामिल है:

डेटा वर्ग दिनांक (var महीना: स्ट्रिंग, var दिन: Int)

स्मार्ट कास्ट

जावा में, आपको अक्सर प्रकार की जांच करनी होती है और फिर उन परिस्थितियों में एक वस्तु डाली जाती है, जहां यह पहले से स्पष्ट हो कि वस्तु डाली जा सकती है।

कोटलिन की स्मार्ट कास्ट आपके लिए इन निरर्थक जातियों को संभाल सकती है, इसलिए यदि आपको पहले से ही कोटलिन के। ऑपरेटर ’के साथ यह जाँचने की ज़रूरत नहीं है, तो आपको एक बयान के अंदर डालने की ज़रूरत नहीं है। उदाहरण के लिए, संकलक जानता है कि निम्न डाली सुरक्षित है:

अगर (हैलो स्ट्रिंग है) {प्रिंटस्ट्रीमिंग (हैलो)}

कंस्ट्रक्टरों के लिए समर्थन

जावा के विपरीत, एक कोटलिन वर्ग में एक प्राथमिक कंस्ट्रक्टर और एक या एक से अधिक माध्यमिक कंस्ट्रक्टर हो सकते हैं, जिन्हें आप अपनी कक्षा घोषणा में शामिल करके बनाते हैं:

क्लास मेनएक्टिविटी कंस्ट्रक्टर (पहला नाम: स्ट्रिंग) {}

निहित व्यापक रूपांतरणों के लिए कोई समर्थन नहीं

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

कोटलिन के साथ एनोटेशन प्रोसेसिंग लाइब्रेरी

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

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

// प्लगइन लागू करें // प्लगइन लागू करें: kotlin-kapt // kapt कॉन्फ़िगरेशन का उपयोग करके संबंधित निर्भरताएं जोड़ें // निर्भरताएं {kapt "com.google.dagger: डैगर-कंपाइलर: $ डैगर-संस्करण" ... ...}

जावा के साथ विनिमेयता

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

दो भाषाओं के बीच स्थानांतरित करने का यह लचीलापन उपयोगी है जब आप कोटलिन के साथ शुरू हो रहे हैं क्योंकि यह आपको कोटलिन को एक मौजूदा परियोजना में वृद्धिशील रूप से पेश करने की अनुमति देता है, लेकिन आप स्थायी आधार पर दोनों भाषाओं का उपयोग करना पसंद कर सकते हैं। उदाहरण के लिए, कुछ विशेषताएं हो सकती हैं जिन्हें आप कोटलिन में लिखना पसंद करते हैं, और कुछ ऐसी विशेषताएँ जिन्हें आप जावा में लिखना आसान समझते हैं। चूंकि कोटलिन और जावा दोनों बाईटकोड को संकलित करते हैं, इसलिए आपके अंतिम-उपयोगकर्ता यह नहीं बता पाएंगे कि आपका जावा कोड कहां समाप्त होता है, और कोटलिन कोड शुरू होता है, इसलिए कोई कारण नहीं है कि आप एक एप जारी कर सकते हैं जिसमें जावा शामिल है। तथा कोटलिन कोड।

यदि आप अपने लिए कोटलिन आज़माना चाहते हैं, तो जब तक आपके पास Android Studio 3.0 पूर्वावलोकन या उच्चतर स्थापित नहीं हो जाता, तब तक कुछ तरीके हैं जो आप शुरू कर सकते हैं:

  • एक नया एंड्रॉइड स्टूडियो प्रोजेक्ट बनाएं। सबसे आसान तरीका एक नई परियोजना बनाना है और परियोजना निर्माण विज़ार्ड से 'कोटलिन समर्थन शामिल करें' चेकबॉक्स का चयन करना है।

  • मौजूदा निर्देशिका में एक कोटलिन वर्ग जोड़ें। प्रश्न में निर्देशिका को नियंत्रित करें, फिर New फ़ाइल> नया> कोटलिन फ़ाइल / कक्षा चुनें। एंड्रॉइड स्टूडियो एक बैनर प्रदर्शित करेगा जो आपको कोटलिन का समर्थन करने के लिए अपनी परियोजना को कॉन्फ़िगर करने के लिए कहेगा; 'कॉन्फ़िगर करें' लिंक पर क्लिक करें और ऑनस्क्रीन निर्देशों का पालन करें।

  • मौजूदा जावा फ़ाइलों को कोटलिन में बदलें। आप किसी भी जावा फ़ाइल को कोटलिन कनवर्टर के माध्यम से चला सकते हैं, फ़ाइल को नियंत्रित करके और> कोड> कन्वर्ट जावा फ़ाइल को कोटल फ़ाइल का चयन करके। '

समेट रहा हु

जैसा कि आप देख सकते हैं कि कोटलिन को जावा में पसंद करने के बहुत सारे अच्छे कारण हैं, हालांकि ऐसे कुछ क्षेत्र हैं जहां जावा का ऊपरी हाथ है। शायद सबसे विशेष रूप से: कई एंड्रॉइड डेवलपर्स बस इस बिंदु पर जावा से अधिक परिचित हैं। संभवत: कोटलिन बनाम जावा की बहस में कभी भी जल्द ही समझौता नहीं हुआ, दोनों में ही अपनी खूबियां हैं। तो, क्या आप कोटलिन पर स्विच करने जा रहे हैं, या क्या आपको लगता है कि जावा अभी भी एंड्रॉइड विकास के लिए सबसे अच्छा विकल्प है?

आगे पढ़िए: Android विकास के लिए जावा सिंटैक्स का परिचय

आसुस क्रोमबुक फ्लिप अब तक जारी सबसे अच्छे क्रोमबुक नोटबुक मॉडल में से एक है, इसके हल्के एल्यूमीनियम शरीर और इसके 360 डिग्री डिस्प्ले काज के लिए धन्यवाद। अपने CE 2019 उत्पाद लाइनअप के हिस्से के रूप में...

आज से, आप फायर टीवी डिवाइस (कुछ अपवादों के साथ) पर YouTube देख सकते हैं।क्रोमकास्ट और एंड्रॉइड टीवी डिवाइस पर अमेज़न प्राइम वीडियो देखने की क्षमता भी आज लुढ़क रही है।ऐसा प्रतीत होता है कि Google / अमे...

साइट पर दिलचस्प है