مقدمة عن لغة kotlin وعلاقتها ببرمجة الاندرويد

في عالم برمجة الاندرويد، اللغة الرئيسية هي الجافا والتي تعتبر جداً متميزة “يمكنك كتابة القليل لتنفيذ امور كبيرة” و من الامور الجميلة التي جلبتها قوقل هي انك تستطيع استخدام اي ميزة جديدة تظهر سواء كانت من قوقل او من احد المطورين فقط بزيادة رقم الإصدار في الـ Gralde, فتستطيع بناء وكتابة تطبيقات بمختلف الامكانيات والخصائص والقابلة للتعديل  بمقابل اكواد غير معقدة نوعاً ما, ولكن لسوء الحظ جوجل لا تزال تسعى جاهدة لتحقيق الكمال، لكننا نعلم جميعا لايوجد شئ كامل والكمال لله سبحانه . وبالتالي، علينا أن نساعد أنفسنا في عالم البرمجة.

ربما تتفق معي ان الجافا ليست واضحه كفاية وحتى وقت كتابة هذه المقالة لايزال الاندرويد محصور مع الجافا ٦ بالاضافة الى بعض الامور البسيطة من الجافا ٧, لذلك توجه العديد من المطورين بكتابة بعض المكتبات التي تساعدهم في تنفيذ بعض الامور والتي من المفترض انها مدعومة في الجافا ٨ ولكن بسبب المشكلة السابقة قاموا بكتابتها كـ مكتبات جانبية واحد اشهر الامثلة هي RetroLambda والتي تسمح لك باستخدام الـ lambda في مشاريعك.

Kotlin هي لغة برمجية جديدة من تطوير فريق JetBrains ظهرت في ٢٠١١ كلغة تعمل على الـ JVM واستمر تطويرها اربع سنوات وظهرت اول نسخة مستقرة لها في ٢٠١٦  (يشير إليها البعض انها لغة Swift للـ Android).

اللغة متوافقة تماماً مع الجافا وهذا يعني انك تستطيع استخدام اي library او framework مبرمج باستخدام الجافا, ومن ناحية الاندرويد فإنك تستطيع كتابة تطبيق باستخدام اللغتين معاً ولاداعي لكتابة كامل التطبيق من جديد.

بعض خصائص Kotlin

Optional and Named Function Parameters

عن طريق هذه الخاصية فانك تستطيع اضافة Parameters اختياريه وايضا تستطيع اضافة تسميه لكل Parameter :

و استدعاء الميثود السابقة يكون باحد الطرق التالية :

Null Safety

من احد اهم الخصائص الجميلة التي جلبتها اللغة هي انه في حالة كانت قيمة المتغير ربما تكون null فإن الكومبايلر سيرفض عمل compile للكود ويجب عليك تعديل الكود الخاص بك, فمثلاً قيمة المتغير nullableVar ربما تكون null:

 ولعمل Compile للكود فانه يجب عليك التاكد من ان قيمة المتغير لاتساوي null

وتستطيع اختصارها الى:

بهذه الطريقة نكون قد عالجنا المشكلة وتستطيع عمل Compile له ولن تصادف اي Exception اثناء عمل البرنامج.

 Mutable and Immutable Variables

في المثال أعلاه، استخدمنا var عند تعريف متغير والذي تستطيع تغير قيمته في اي وقت وهذا مايطلق عليه mutable،  ولكن ان كنا نريد تعريف ثابت يحمل قيمة ما ولا نريد تغير قيمته فإننا نستخدم val ويطلق عليه immutable.

Lambdas

كلنا نعرف ماهي Lambdas وطريقة استخدامها كالتالي:

Extensions

في معظم الاحيان قد تحتاج اضافة بعض المميزات الاضافية على اي كلاس مبرمج سابقا, فالامر الطبيعي والذي ستقوم بعمله هو بعمل extend للكلاس وتضيف اي امر تريده وتستخدم الكلاس الجديد الذي قمت بكتابته ولكن ربما يصادفك final class او كلاس لاتملك صلاحية للوصول اليه.

فالحل الذي جلبته لغة Kotlin هو الـ Extensions وهو انك تستطيع اضافة اي امر تريده على اي كلاس موجود وبدون عمل extend له, بالمثال التالي سنقوم باضافة ميثود جديدة على كلاس EditText ووظيفتها هي اختصار العبارة التالية editText.text.toString()

او نستطيع اختصارها الى:

ولإستدعاء الميثود التي قمنا باضافتها يكون كالتالي:

Data Class

لو طلبت منك ان تكتب كلاس User باستخدام الجافا وطلبت منك تنفيذ الميثود التالية copy, equals, hashCode, and toString فكم عدد الأسطر التي تتوقع انك ستكتبها؟ في Kaotlin لن تحتاج سوا سطر واحد 🙂

بكتابتك للسطر السابق ستقوم اللغة مباشرة بتنفيذ جميع الميثود التالية equals(), hashCode() and copy() methods, and toString()

استخدام Kotlin مع الاندرويد ستديو

قبل كل شئ قم بتثبيت اضافة Kotlin على الاندرويد ستديو وذلك من Preferences – Editor – Plugins وابحث عن Kotlin

Screen Shot 2016-07-20 at 7.05.20 PM

تستطيع الان انشاء اي ملف بامتداد .kt وتقوم بكتابه الكود الخاص بك بداخله ومباشرة سيتعرف الاندرويد ستديو على الملفات الجديدة وسيطلب منك تعديل ملف الـ Gradle ليدعم الـ Kotlin والحل المختصر هو بالضغط على خيار Configure وسيقوم مباشرة باضافة بعض الاسطر في ملف الـ Gradle

Screen Shot 2016-07-20 at 7.17.23 PM

تحويل ملفات الجافا الى Kotlin

 افتح اي ملف جافا وليكن مثلا MainActivity.java وباستخدام خاصية Find Action الموجودة في الاندرويد ستديو قم بالبحث عن Convert Java File to Kotlin File 

Screen Shot 2016-07-20 at 6.56.44 PM

Share:
0 comments on مقدمة عن لغة kotlin وعلاقتها ببرمجة الاندرويد

Post a comment

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *