Kotlin vs Java - ما الفرق بين الاثنين؟

مؤلف: John Stephens
تاريخ الخلق: 24 كانون الثاني 2021
تاريخ التحديث: 1 تموز 2024
Anonim
اتعلم جافا ولا كوتلن ؟ Java Vs Kotlin
فيديو: اتعلم جافا ولا كوتلن ؟ Java Vs Kotlin

المحتوى


ربما لا تزال Java هي أول لغة برمجة تتبادر إلى الذهن عندما تفكر في Android ، لكنك لا تفكر في ذلك يملك لاستخدام Java لتطوير Android. في الواقع ، Kotlin هو الآن جوجلفضلاللغة الرسمية للأندرويد!

لمعرفة المزيد حول Java ، يمكنك الحصول على تمهيد مجاني لدورة Java في Make Android Apps.

اليوم ، يأتي Android Studio مزودًا بدعم Kotlin المدمج ، لذلك فإن إنشاء مشروع Android يفهم كود Kotlin أمر سهل مثل تحديد مربع اختيار في معالج إنشاء مشروع Android Studio. لقد زاد الدعم للخيار الإضافي للغاية ، لدرجة أن هذا القرار يأتي الآن بشكل أساسي إلى الأفضلية.

ولكن إذا قمت بالتحويل من Java إلى Kotlin ، فما الذي تربحه بالضبط؟ ما الميزات الموجودة في Kotlin ، والتي لا تتوفر في Java ، والعكس صحيح؟

في هذه المقالة ، سننظر في جميع الاختلافات الرئيسية بين Kotlin و Java.

Kotlin vs Java ، يوفر الإصدار الأحدث رمزًا أكثر إيجازًا - دون العثور على viewByIds

إذا قارنت فئة Kotlin وفئة Java التي تقوم بنفس العمل ، فستكون فئة Kotlin بشكل عام أكثر إيجازًا ، ولكن هناك مجالًا واحدًا على وجه الخصوص حيث Kotlin يمكن أن يقلل بشكل خطير من مقدار رمز boilerplate الذي تحتاج إلى كتابته: findViewByIds.


تتيح لك Kotlin Android Extensions استيراد مرجع إلى طريقة العرض في ملف النشاط الخاص بك ، وعندها ستتمكن من التعامل مع طريقة العرض هذه كما لو كانت جزءًا من النشاط. النتيجة؟ لن تضطر أبدًا إلى كتابة طريقة أخرى لـ findViewById مرة أخرى!

قبل أن تتمكن من استخدام هذه الإضافات ، ستحتاج إلى إضافة مكون إضافي إلى ملف build.gradle على مستوى الوحدة النمطية (تطبيق المكوّن الإضافي: "kotlin-android-extensions") ولكن بعد ذلك ، تكون مستعدًا لبدء استيراد طرق العرض ، من أجل مثال إذا احتوى ملف activity_main.xml على TextView مع معرّف textView ، فأنت تضيف ما يلي إلى نشاطك:

استيراد kotlinx.android.synthetic.main.activity_main.textView

يمكنك بعد ذلك الوصول إلى TextView باستخدام معرفه فقط:

textView.setText ("Hello World")

هذا هو كثير أكثر إيجازاً من مكافئ Java:

TextView text = (TextView) findViewById (R.id.textView)؛ text.setText ("Hello World") ؛

Kotlin آمنة خالية افتراضيا

NullPointerExceptions هي مصدر كبير للإحباط لمطوري جافا. يتيح لك Java تعيين قيمة خالية لأي متغير ، ولكن إذا حاولت استخدام مرجع كائن له قيمة فارغة ، فاستعد لنفسك لمواجهة NullPointerException!


اقرأ أيضا: Kotiln لمقدمة أندرويد

في Kotlin ، جميع الأنواع غير قابلة للإلغاء (غير قادرة على الاحتفاظ بقيمة فارغة) افتراضيًا. إذا حاولت تعيين أو إرجاع فارغة في كود Kotlin الخاص بك ، فسوف تفشل في وقت الترجمة ، لذلك لن يتم تجميع أي من السطور التالية:

اسم فال: سلسلة = فارغة

متعة getName (): سلسلة = فارغة

اذا أنت هل حقا ترغب في تعيين قيمة فارغة لمتغير في Kotlin ، فستحتاج إلى وضع علامة صريحة على هذا المتغير على أنه فارغ ، وذلك بإضافة علامة استفهام بعد النوع:

عدد فال: كثافة العمليات؟ = لاغية

هذا يجعل من المستحيل تقريبًا مواجهة NullPointerExceptions في Kotlin - في الواقع ، إذا واجهت هذا الاستثناء ، فمن المحتمل أن يكون ذلك لأنك طلبت صراحةً من Kotlin أن ترمي واحدة أو أن NullPointerException نشأ من كود جافا الخارجي.

وظائف التمديد

يمنح Kotlin للمطورين القدرة على تمديد الفصل بوظائف جديدة ، وهو أمر مثالي إذا كان هناك فئة شعرت دائمًا أنها تفتقد إلى طريقة مهمة!

لا تتوفر "وظائف الامتداد" هذه في Java ، على الرغم من أنها متوفرة بلغات برمجة أخرى يمكنك استخدامها لتطوير Android ، مثل C #.

قراءة التالي: جافا تعليمي للمبتدئين

يمكنك إنشاء وظيفة ملحق عن طريق بادئة اسم الفئة التي تريد تمديدها (مثل "سلسلة") على اسم الوظيفة التي تنشئها ("styleString") على سبيل المثال:

String.styleString () ممتع: String {// نمط السلسلة ثم أعدها //}

يمكنك بعد ذلك استدعاء هذه الوظيفة في حالات الطبقة الموسعة ، عبر. التدوين ، كما لو كان جزءًا من تلك الفئة:

myString.styleString ()

Coroutines هم مواطنون من الدرجة الأولى

عندما تبدأ عملية طويلة الأمد ، مثل شبكة I / O أو عمل كثيف وحدة المعالجة المركزية ، يتم حظر مؤشر ترابط الاتصال حتى تكتمل العملية. نظرًا لأن نظام Android مرتبط بشكل افتراضي ، بمجرد حظر الخيط الرئيسي ، سيتم تجميد واجهة المستخدم الخاصة بالتطبيق ، وستظل غير مستجيبة حتى تكتمل العملية.

في Java ، كان الحل تقليديًا هو إنشاء مؤشر ترابط في الخلفية حيث يمكنك تنفيذ هذا العمل المكثف أو طويل الأمد ، ولكن إدارة مؤشرات ترابط متعددة يمكن أن تؤدي إلى رمز معقد وعرضة للخطأ ، وإنشاء سلسلة جديدة يعد عملية مكلفة.

بينما يمكنك إنشاء مؤشرات ترابط إضافية في Kotlin ، يمكنك أيضًا استخدام coroutines. يقوم Coroutines بأداء مهام طويلة المدى ومكثفة عن طريق تعليق التنفيذ في نقطة معينة دون حظر الخيط ، ثم استئناف هذه الوظيفة في وقت لاحق ، ربما على خيط آخر. هذا يسمح لك بإنشاء رمز غير متزامن بدون حظر تبدو متزامن ، وبالتالي أكثر وضوحا وموجزة وقراءة الإنسان. Coroutines غير مكدسة أيضًا ، لذلك يكون لها استخدام أقل للذاكرة مقارنة بالخيوط ، ويفتح الباب أمام أنماط إضافية من البرمجة غير المتزامنة غير المحظورة ، مثل المزامنة / الانتظار.

لا توجد استثناءات محددة

لم يقم Kotlin بالتحقق من الاستثناءات ، لذلك لن تحتاج إلى التقاط أي استثناءات أو إعلانها.

سواء كان هذا هو الشيء الذي يوجهك إلى Kotlin ، أو يجعلك ترغب في الالتزام بجافا ، فسوف يعتمد على رأيك في الاستثناءات المحددة ، حيث إنها ميزة تقسم مجتمع المطورين. إذا كنت سئمت من تجريب / تجميع كتل تجميع رمز جافا الخاص بك ، فستكون سعيدًا بهذا الإغفال ، ولكن إذا وجدت أن الاستثناءات التي تم التحقق منها تشجعك على التفكير في استرداد الأخطاء ودفعك في النهاية إلى خلق المزيد من القوة رمز ، ثم من المرجح أن ترى هذا كمنطقة تتمتع فيها Java بالميزة فوق Kotlin.

الدعم الأصلي للوفد

يدعم Kotlin ، على عكس Java ، نمط تصميم "التكوين على الميراث" ، عبر تفويض من الدرجة الأولى (يُعرف أحيانًا باسم التفويض الضمني). التفويض هو حيث يقوم كائن مستلم بتفويض العمليات إلى كائن مفوض ثان ، وهو كائن مساعد له السياق الأصلي.

يمثل وفد Kotlin الطبقي بديلاً للميراث الذي يجعل من الممكن استخدام الميراث المتعدد. وفي الوقت نفسه ، تساعد خصائص Kotlin المفوضة في منع تكرار الشفرة ، على سبيل المثال ، إذا كنت بحاجة إلى إعادة استخدام نفس الكود لأحرف وخصائص الخصائص المتعددة ، فيمكنك استخراج هذه الشفرة في خاصية مفوضة. يحتاج مفوض العقار إلى تحديد وظيفة مشغل getValue ، واختيارياً ، مشغل setValue:

المفوض من فئة {operator fun getValue (...) ... ... ...}} fun fun setValue (...) ... ... ...}}

بعد ذلك ، عند إنشاء خاصية ، يمكنك التصريح بأن وظائف getter و setter لهذه الخاصية المعينة تتم معالجتها بواسطة فئة أخرى:

class MyClass {var property: String by Delegate ()}

فئات البيانات

ليس من غير المعتاد أن يحتوي المشروع على فئات متعددة لا تفعل شيئًا سوى الاحتفاظ بالبيانات. في Java ، ستجد نفسك تكتب الكثير من التعليمات البرمجية النقطية لهذه الفئات ، على الرغم من أن الفئات نفسها لديها وظائف قليلة جدًا. عادة ، ستحتاج إلى تحديد مُنشئ وحقول لتخزين البيانات ووظائف getter و setter لكل حقل ، بالإضافة إلى وظائف hashCode () و equals () و toString ().

في Kotlin ، إذا قمت بتضمين الكلمة الأساسية "بيانات" في تعريف الفصل الدراسي الخاص بك ، فسيقوم المجمع بتنفيذ كل هذا العمل نيابةً عنك ، بما في ذلك إنشاء كل الحروف الضرورية والفواصل:

فئة البيانات التاريخ (شهر var: سلسلة ، يوم var: Int)

يلقي الذكية

في Java ، غالبًا ما تحتاج إلى التحقق من الكتابة ثم رمي كائن في المواقف التي يكون من الواضح بالفعل أنه يمكن تصويرها.

بإمكان قوالب Kotlin الذكية التعامل مع هذه القوالب الزائدة عن الحاجة بالنسبة لك ، لذلك لن تحتاج إلى الإدلاء ببيان ما إذا كنت قد راجعت بالفعل من قبل مشغل Kotlin. على سبيل المثال ، يعرف المترجم أن القوالب التالية آمنة:

إذا كان (hello is String) {printString (hello)}

دعم المنشئات

بخلاف Java ، يمكن أن تحتوي فئة Kotlin على مُنشئ أساسي وواحد أو أكثر من المنشئات الثانوية ، التي تنشئها بإدراجها في إعلان الفصل الخاص بك:

مُنشئ النشاط الرئيسي للفئة (الاسم الأول: سلسلة) {}

لا يوجد دعم لتوسيع التحويلات الضمنية

لا يدعم Kotlin تحويلات التوسيع الضمني للأرقام ، لذلك لا يتم تحويل الأنواع الأصغر ضمنيًا إلى أنواع أكبر. في Kotlin ، إذا كنت تريد تعيين قيمة النوع Byte لمتغير Int ، فستحتاج إلى إجراء تحويل صريح ، في حين أن Java لديها دعم للتحويلات الضمنية.

الشرح معالجة المكتبات مع Kotlin

تدعم Kotlin جميع أطر عمل Java ومكتباتها الحالية ، بما في ذلك الأطر المتقدمة التي تعتمد على معالجة التعليقات التوضيحية ، على الرغم من أن بعض مكتبات Java توفر بالفعل ملحقات Kotlin ، مثل RxKotlin.

إذا كنت ترغب في استخدام مكتبة Java تعتمد على معالجة التعليقات التوضيحية ، فإن إضافتها إلى مشروع Kotlin الخاص بك مختلفة قليلاً حيث ستحتاج إلى تحديد التبعية باستخدام kotlin-kapt البرنامج المساعد ، ثم استخدم أداة معالجة التعليقات التوضيحية Kotlin (kapt) بدلاً من annotationProcessor. فمثلا:

// Apply the plugin // application plugin: kotlin-kapt // أضف التبعيات المعنية باستخدام تكوين kapt // تبعيات {kapt "com.google.dagger: dagger-compiler: $ dagger-version" ... ... ...}

التبادل مع جافا

عند مناقشة ما إذا كنت تريد استخدام تطوير Kotlin أو Java لنظام Android ، يجب أن تدرك أن هناك خيارًا ثالثًا: استخدم الأثنين. على الرغم من جميع الاختلافات بين اللغتين ، فإن Java و Kotlin يمكن تشغيلهما بنسبة 100٪. يمكنك الاتصال برمز Kotlin من Java ، ويمكنك الاتصال برمز Java من Kotlin ، لذلك من الممكن وجود فصول Kotlin و Java جنبًا إلى جنب داخل نفس المشروع ، وسيظل كل شيء مترجمًا.

تعتبر هذه المرونة في التنقل بين اللغتين مفيدة عندما تبدأ مع Kotlin لأنها تتيح لك إدخال Kotlin في مشروع قائم بشكل تدريجي ، ولكن قد تفضل أيضًا استخدام كلتا اللغتين بشكل دائم. على سبيل المثال ، قد تكون هناك ميزات معينة تفضل كتابتها في Kotlin ، وبعض الميزات التي تجدها أسهل في كتابتها في Java. نظرًا لأن كلا من Kotlin و Java مترجمان للرمز الثانوي ، فلن يتمكن المستخدمون لديك من معرفة أين تنتهي شفرة جافا ، ويبدأ رمز Kotlin ، لذلك لا يوجد سبب يمنعك من إصدار تطبيق يتكون من Java و كود Kotlin.

إذا كنت تريد تجربة Kotlin بنفسك ، فطالما تم تثبيت Android Studio 3.0 Preview أو إصدار أعلى ، فهناك بعض الطرق التي يمكنك من خلالها البدء:

  • إنشاء مشروع Android Studio جديد. أسهل طريقة هي إنشاء مشروع جديد وتحديد مربع الاختيار "تضمين دعم Kotlin" من معالج إنشاء المشروع.

  • إضافة فئة Kotlin إلى دليل موجود. انقر مع الضغط على Control (التحكم) في الدليل المعني ، ثم حدد "File> New> Kotlin File / Class." سيعرض Android Studio لافتة تطلب منك تكوين مشروعك لدعم Kotlin ؛ انقر على الرابط "تكوين" واتبع التعليمات التي تظهر على الشاشة.

  • تحويل ملفات Java الموجودة إلى Kotlin. يمكنك تشغيل أي ملف Java من خلال محول Kotlin ، عن طريق التحكم في النقر فوق الملف وتحديد "Code> تحويل ملف Java إلى ملف Kotlin."

تغليف

كما ترون هناك الكثير من الأسباب الجيدة لتفضيل Kotlin على Java ، ومع ذلك فهناك مجالان لهما اليد العليا لـ Java. ولعل أبرزها: أن العديد من مطوري Android هم ببساطة أكثر دراية بجافا في هذه المرحلة. من المحتمل ألا تتم تسوية مناظرة Kotlin و Java في أي وقت قريب ، حيث يكون لكل منهما ميزاته الخاصة. هل ستقوم بالتبديل إلى Kotlin ، أم أنك تشعر أن Java لا تزال الخيار الأفضل لتطوير Android؟

قراءة التالي: مقدمة إلى بناء جملة Java لتطوير Android

يُعد amung Galaxy 8 أحد أفضل هواتف amung على الإطلاق ، حيث يقدم تصميمًا مريحًا وشاشة رائعة وكاميرا رئيسية قادرة جدًا. يبدو أن الشركة لم تنسها ، لأن إصدارًا مستقرًا من Android Pie يبدو أنه يصيب الأجهزة...

بعض الألعاب الأكثر شعبية في العالم موجودة على منصات متحركة في الوقت الحاضر. بينما تتصدر عناوين Clah of Clan و Pokémon Go عناوين الصحف ، إلا أن العديد من مطوري البرامج المستقلة يزدهرون في متجر Go...

اختيار الموقع