مميزات الجافا الجديدة قد تضع حدا لكوتلن !

مميزات الجافا الجديدة قد تضع حدا لكوتلن !

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



عن لغة البرمجة كوتلن (Kotlin) : 

لغة برمجة  كوتلن ظهرت سنة 2011 و حصلت على اول نسخة مستقرة لها في 2016 و انتشرت انتشار النار في الهشيم بعد اعلان جوجل عنها في مؤتمرها الخاص سنة 2017 و هذا عائد لمجموعة من الخصائص التي تقدمها و شكل الكود و السرعة في الآداء. هذا كله اقنع مجموعة من المطورين و المبرمجين ذوي الخبرة للإانتقال الى كوتلن بدل جافا .
كوتلن حاليا لديها اكثر من  4 مليون مستخدم و مجتمع رائع يقف ورائها و دعم ضخم من عملاقة التكنولوجيا مثل جوجل.

مميزات الجافا الجديدة قد تضع حدا لكوتلن !

هذه المقالة قد تكون Clickbait نسبيا : 

هذه المقالة ماخودة كليا من مؤتمر كوتلن 2019 و من اعداد Jake Warthon و بنفس عنوان هذه المقالة تقريبا، لذلك قبل ان تشرع في الدفاع عن أيٍ من الجانبين ( جانب الجافا او كوتلن ) و تدعي اننا أقل حكمة من أخذ القرار، فنذكرك ان هذا المقال ما هو الا توسيع لأفكار الفيديو و شرح أعمق له.


 هل هذه نهاية كوتلن ام جافا ؟

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












الخصائص الجديدة في لغة البرمجة جافا : 

خاصية variable type inference :هذه الخاصية متوفرة في كوتلن مسبقا و ايضا في جميع اللغات من نوع Dynamic Type حيث بدل كتابة نوع المتغير الذي لديك يقوم Compiler بتحديد نوعه و سيتضح ذلك في المثال التالي حيث بدل تحديد نوع Message بانه string سيقوم الكومبايلير بتحديده بدلا عنك.










وصف للسيو

كما تلاحظ عزيزي القارئ فالكفة هنا لصالح كوتلن و ذلك بسبب ان هذه الخاصية محدودة في الجافا فلا يمكنك انشاء متغير من نوع Null  و غيرها من الاشياء التي توجد تحت الكومنت الثاني في الصورة السابقة .

خاصية Local Functions :
هذه خاصية ايضا موجودة بكوتلن منذ الازل و ها هي تصل الى جافا رغم انها لازالت في النسخة التجريبية. و هي تسمح لنا بوضع Function داخل Function . و الهدف منها هو منع الوصول اليها من خارج الدالة الأب (Parent) .






وصف للسيو

كود الجافا لن يعمل اذا لم تضف ( ; ) الى اخر السطر لقد نسيتها 😅 . قد تتسائل لماذا سجلنا نقطة لصالح جافا هنا و لم نجعل النتيجة متعادلة بين اللغتين، ففي الحقيقة اذا قمنا بالاطلاع على البايت كود سنجد ان كوتلن تعاملت مع الـ nested functions مثل  lambda في حين ان الجافا تقوم بذلك بشكل افضل، لهذا فجافا تتفوق هنا.

خاصية Value-Based Classes :
او كما تسمى في كوتلن ب data class و هي من اكثر الاشياء التي قد تشجعك الى الانتقال كوتلن، إلا ان الجافا قد قامت باضافة هذه الخاصية ايضا و التي تقوم على انشاء نموذج  Model يحتفظ بالداتا داخله و يعطيك امكانية الوصول اليها، مثلا كلاس Person التالي ياخد قيمتين و يوفرهما لك وقتما شئت :







وصف للسيو

توجد العديد من الاختلافات بين هذين الكلاسين و الذي يسبب بعض المشاكل لكوتلن مع JVM 9 رغم ان كلاهما يقومان بحفظ الداتا . لكن ما تقوم به كوتلن هو تحويل المتغرين  name  و age الى دالتين على هذا الشكل getAge  و getName اما جافا فتقوم بانشاء دالتين  name و  age . و يمكننا إعتبارها هنا تعادلا بين اللغتين لأنهما لا تختلفان كثيرا من حيث المبدأ.


خاصية الـ Sealed Class : 
الله على عظمة هذا الكلاس و اذا كنت تتسائل عن دور هذا الكلاس فانت لا تسال عن غريب بل هو مشابه للـ Enum غير انه يحمل معه الداتا. و قد لا يكون هذا المقال المكان المناسب للتحدث عن الـ Enum و الـ Sealed Classes لذلك عودة بنا للمقارنة سنجد  و مجددا جافا تتفوق في نقطة الآداء.







وصف للسيو

خاصية الـ Instance Matching :
مجددا جافا تستلهم من كوتلن و لكن بطريقة إبداعية أكثر و هذه الخاصية الهدف منها التحقق من نوع كائن ما،  إذ تحصل على النتيجة دون الحاجة الى عمل  Cast. و قد تتسائل كيف يؤثر هذا على كود الجافا، في الحقيقة تغيير نوع متغير ما من طرف الـ Compiler قد يؤدي الى تغيير سلوك البرنامج برمته، سنقوم بإعطاء نقطة الفوز هنا لكوتلن كونها الأزلية في تخصيص هذه التقنية، و الجافا فقط إتبعت هذا النمط مؤخرا.







وصف للسيو

الـ Destructuring :
و هو امكانية استخراج متغيرات من داخل الكائن، و بالنسبة لجافا و كوتلن فهذا يعني داخل الـ record او الـ Data class . وهنا تفوز كوتلن مجددا لانها أسهل بكثير من هذه الناحية. لكن كلاهما يعانيان مع بعض المشاكل حين يتعلق الأمر بالـ DestructingK الخاصية في جافا تعتمد على Pattern Matching في الأصل و الذي يحاكي الـ Destructuring   .








وصف للسيو

و تقنيات أخرى أيضا : 
ساذكر الباقي دون إظهار الكود و ساذكر ما ترغب جافا في استلهامه من كوتلن : 
  1. MultiLine String : و تسمح لنا الخاصية باضافة string في اكثر من سطر بوضع النص بين 6 علامات اقتباس  """your text""" و تعد الافضلية لجافا +1.
  2. Expression Switch: تطوير لخاصية Switch الموجودة في جافا. الافضلية لجافا +1.
  3. Virtual Threads: شيء قريب من Coroutines الموجودة في كوتلن و التي تسمح لك بالانتقال بين Threads بسهولة . -تعادل
  4. سجله اوريجي 😂 .

يمكنك ان تلاحظ ان التحديثات الخاصة بالجافا تؤهلها لتغطي على  كوتلن حين يتعلق الأمر بتطوير تطبيقات الموبايل، فما يوجد في كوتلن مسبقا قد تم إستلهامه في تحديثات الجافا، و مستقبلا قد تكون الغلبة للجافا و سنتخلى من الآن فصاعدا على فكرة ان كوتلن ستقضي على الجافا مستقبلا في مجال تطوير تطبيقات الأندرويد.

هل غيرت رايك؟

في النتيجة السابقة قد تكون لكوتلن الأفضلية شيئاً ما، لكن بعد ثلات سنوات من الآن قد تستطيع جافا حل مشاكلها و قد تصبح أفضل بكثير من كوتلن، نعم جافا بعد 3 سنوات من الان قد تصبح افضل من كوتلن الحالية بما ان لديهم كامل التحكم في JVM . فإن كانت تراودك دائما الشكوك حول القضاء على الجافا و الإهتمام بكوتلن لأن " كوتلن هي مستقبل تطوير تطبيقات الموبايل " ففكر مجددا و مليا في هذه الميزات و التحديثات و قوة الجافا في المستقبل  ... لكن ؟!

لكن ... كوتلن ليست مجردة لغة برمجة ! 

دعني اطرح سؤلا سخيفا عليك، ما هي كوتلن بالنسبة لك ؟ قد تكون مجرد لغة اخرى كسائر اللغات البرمجية لكن في الحقيقة هي ليست كذلك، بل نظام متكامل متكون من لغة برمجية موجهة لعدة انظمة .
  1. كوتلن موجهة الى JVM 
  2. كوتلن موجهة الى Javascript 
  3. كوتلن موجهة الى Web assembly
  4. كوتلن  Native موجهة لجميع الانظمة .
و لهذا فكوتلن لا تحتاج الى JVM لتشتغل على اي جهاز بل كوتلن تشتغل على IOS مثلا بشكل مباشر في حين ان جافا لا تستطيع .اذا كوتلن بعبارة اخرى هي لغة تنافس جميع اللغات و توفر اداء و سرعة لا بأسبهما خصوصا و ان القادم افضل.
قد افترضنا ان الوحيد الذي سيتطور هو لغة البرمجة جافا لكن لو اخدنا بعين الاعتبار الخصائص التي ستحصل عليها كوتلن  في نفس المدة أيضا فسيحول ذلك الى إستخلاص الجافا لن تستطيع التفوق على كوتلن لا اليوم و لا غدا (هذا بالمعايير الحالية على الاقل).
 و على الاغلب ان جافا لا تخطط الى التخلص من NULL بجعله اختياريا و ليس افتراضيا و هذا اكبر مشاكل الجافا على الاطلاق و الذي لا يمكن ان تكون جافاوي الا وقد عانيت الامرين معه (NullPointerException قد تذكرك بشيئ ما ) .

و لا ننسى انه مهما حدث فكوتلن تبقى لغة سهلة و جذابة و لا تحتاج الى 70 سطرا لكتابة كود بسيط، فهي نوعا ما لها بعض الأفضلية . بالاضافة الى الفريق الخاص بكوتلن يعمل لحل المشاكل التي طرحتها تحديثات الجافا اول باول مما يعني ان كوتلن حل مثالي للجافا.

في النهاية 

كوتلن لغة عظيمة تتوفر على ادوات لإنشاء تطبيقات تعمل على جميع الانظمة و مختلف المنصات فمن المستحيل ان تستطيع الجافا اسقاطها فانتشار كوتلن يتضاعف كل يوم بوتيرة مهولة. كذلك الجافا أصبحت لغة ذات انتشار واسع و لغة منقطعة النظير و ايضا اعتبرها الافضل للناحية التعليمية بجانب C و C++.

كاتب المقال : Ismail Bella

شاركه على :