اذهب إلى المحتوى

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

هل لغة كوتلن ولغة جافا متشابهتان؟

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

كما يمكن استخدام لغة جافا في تطبيقات الواجهة الخلفية التي تعمل من طرف الخادم وفي تطبيقات قواعد البيانات وتطبيقات الواجهة الأمامية والأنظمة المدمجة وتطبيقات الجوال وغيرها من أنواع التطبيقات المتنوعة الأخرى، وكذلك تتميز لغة كوتلن أيضًا بأنها لغة متعددة الاستخدامات فهي تعمل على أي نظام تشغيل يدعم آلة جافا الافتراضية JVM وتعد اللغة الرسمية لتطوير تطبيقات أندرويد، ويمكن كذلك استخدامها في برمجة تطبيقات جافا سكريبت من خلال مشروع Kotlin/JS الذي يسمح بكتابة شيفرات مشتركة بين اللغتين، ولتطوير تطبيقات من طرف الخادم، وتطبيقات الويب، وتطبيقات سطح المكتب.

إن لغة جافا هي لغة أقدم وأكثر نضجًا من كوتلن، فقد صدرت لأول مرة في عام 1996، بينما أُطلِق أول إصدار من كوتلن Kotlin 1.0 في عام 2016، وبالرغم من ذلك تمكنت لغة كوتلن من فرض نفسها بسرعة وأصبحت اللغة الرسمية المفضلة لتطوير نظام التشغيل أندرويد في عام 2019، ويمكن القول بأننا إذا استثنينا مجال الأندرويد، فلن يكون هناك أي مميزات ترجح كفة كوتلن على جافا.

وإليك الجدول التالي الذي يوضح تطور لغتي البرمجة Java و Kotlin:

السنة جافا كوتلن
1995–2006 JDK Beta, JDK 1.0, JDK 1.1, J2SE 1.2, J2SE 1.3, J2SE 1.4, J2SE 5.0, Java SE 6 لم تكن لغة كوتلن موجودة
2007 بدء العمل على مشروع Project Loom لم تكن لغة كوتلن موجودة بعد
2010 لم يطلق إصدار جديد من جافا بدء تطوير كوتلن
2011 Java SE 7 الإعلان عن مشروع كوتلن
2012 لم يطلق إصدار جديد من جافا اعتبار لغة كوتلن مفتوحة المصدر
2014 Java SE 8 (LTS) لم يطلق إصدار جديد من كوتلن
2016 لم يطلق إصدار جديد من جافا Kotlin 1.0
2017 Java SE 9 Kotlin 1.2 والإعلان عن دعم Kotlin لنظام أندرويد.
2018 Java SE 10, Java SE 11 (LTS) Kotlin 1.3 ودعم الروتينات المساعدة coroutines
2019 Java SE 12, Java SE 13 Kotlin 1.4 (توافق مع Objective-C و Swift) والإعلان عن كوتلن كلغة مفضلة للمطورين من قبل جوجل.
2020 Java SE 14, Java SE 15 لم يطلق إصدار جديد من كوتلن
2021 Java SE 16, Java SE 17 (LTS) Kotlin 1.5, Kotlin 1.6
2022 Java SE 18, JDK 19 Kotlin 1.7 (alpha version of Kotlin K2 compiler), Kotlin 1.8
2023 Java SE 20, Java SE 21, JDK 20, JDK 21 Kotlin 1.9
2024 Java SE 22 Kotlin 2.0

مقارنة بين كوتلن وجافا من ناحية الأداء واستهلاك الذاكرة

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

أولًا: من ناحية الأداء

على الرغم من أن كوتلن و جافا ولغات البرمجة الأخرى التي تنفذ على الآلة الافتراضية JVM الأخرى مختلفة في عدة عوامل عن بعضها، إلا أنها متشابهة إلى حد ما في الأداء، لا سيما عند مقارنتها مع عائلة اللغات المعتمدة على المصرّفات والتي تنفذ على المعالج الخاص بالآلة مثل مُصرّف GCC أو Clang ، فقد صممت آلة جافا الافتراضية JVM في الأصل لاستهداف الأنظمة المدمجة محدودة الموارد التي كانت متوفرة في فترة التسعينيات، وهذا فرض قيدين أساسيين على هذه اللغات لتتمكن من العمل بكفاءة على موارد محدودة وهما:

  • جعل شيفرة البايت لآلة جافا الافتراضية بسيطة قد المستطاع: إذ يحتوي الإصدار الحالي من آلة جافا الافتراضية JVM التي تترجم لغتي كوتلن وجافا، على 205 تعليمة فقط، في حين يمكن للمعالجات الحديثة x64 أن تدعم وتنفذ أكثر من 6000 تعليمة مشفرة اعتمادًا على طريقة العد.

  • التحسين في وقت التشغيل Runtime: فأسلوب تعدد المنصات الذي يعتمد على كتابة الكود مرة واحدة وتشغيله في أي مكان يساعد على إجراء عمليات تحسين الأداء في وقت تشغيل الكود (وليس في وقت تصريفه compile-time)، بعبارة أخرى تقوم آلة جافا الافتراضية JVM بترجمة معظم شيفرة البايت الخاصة بها إلى تعليمات في وقت التشغيل، فعند ترجمة كود جافا أو كوتلن لا يحول هذا الكود مباشرةً إلى كود الآلة بل يحول إلى كود بايت byte code وسيط ثم تترجم الآلة الافتراضية هذا الكود الوسيط إلى تعليمات يمكن للجهاز فهمها أثناء تشغيل البرنامج، وبالتالي تؤجل بعض عمليات التحسين لحين تشغيل البرنامج بشكل فعلي. كما يمكن استخدام تطبيقات مفتوحة المصدر لآلة جافا الافتراضية JVM مثل HotSpot لتحسين الأداء إذ تقوم في هذه الحالة بتجهيز كود بايت مسبق الترجمة pre-compiles لتشغيله بشكل أسرع من خلال المفسر interpreter.

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

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

  • تتجنب كوتلن استخدام الدوال العليا higher-order functions التي تستخدمها جافا لامدا Java lambda في الاستدعاء الديناميكي للدالة من خلال التعليمة InvokeDynamic مما يحسن الأداء.

  • تحتوي شيفرة كود البايت bytecode التي تولدها لغة كوتلن على ميزة التحقق من القيم الفارغة عند استخدام التبعيات الخارجية، مما يبطئ أداءها مقارنةً بجافا.

ثانيًا: من ناحية الذاكرة

صحيح أن استخدام الكائنات للأنواع الأساسية (وهو الأسلوب المتبع في لغة كوتلن) يتطلب تخصيصًا أكثر للذاكرة مقارنة باستخدام أنواع البيانات الأولية (وهو الأسلوب المتبع في لغة جافا) من الناحية النظرية، لكن من الناحية العملية تستخدم تعليمات كود البايت في لغة جافا تقنية التغليف التلقائي autoboxing وفك التغليف unboxing للتعامل مع الكائنات والتي يمكن أن تضيف حملًا وعبئًا حسابيًا عند استخدامها بشكل مفرط. على سبيل المثال، لا تقبل الدالة String.format الخاصة بجافا سوى الكائنات كدخل لها، لذلك لذلك عند الحاجة لتنسيق عدد صحيح من نوع int في جافا، يتم تغليفه تلقائيًا في كائن من نوع Integer قبل استدعاء الدالة String.format.

ويمكن القول بشكل عام، لا توجد اختلافات كبيرة بين لغتي جافا وكوتلن فيما يتعلق بالأداء والذاكرة، وبالرغم من أنك قد تجد معايير أداء مختلفة عبر الإنترنت تظهر اختلافات طفيفة في الاختبارات الدقيقة بين هاتين اللغتين، ولكن لا يمكن تعميم هذه النتائج.

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

مقارنة الميزات الفريدة لكل من لغتي كوتلن وجافا

تشترك لغتا كوتلن وجافا في العديد من السمات الأساسية، لكن كل لغة تقدم ميزات فريدة ومختلفة عن الأخرى، فمنذ أن أصبحت كوتلن لغة جوجل المفضلة لتطوير أندرويد، برزت ميزات مثل الدوال الإضافية وإمكانية تعيين القيم null بشكل صريح Explicit nullability بكونها الميزات الأكثر فائدة للغة، من ناحية أخرى عند استخدام كوتلن فإن أكثر الميزات التي سنفتقدها والتي كانت تتيحها لغة جافا هي الكلمة المفتاحية protected والمعامل الشرطي الثلاثي ternary operator الذي يمكننا من التعبير عن الشروط بطريقة قصيرة ومختصرة.

المعامل-الشرطي-الثلاثي-معرب.png

  • لنقم بتحليل مفصل للمميزات المتاحة في كولن مقارنةً بجافا، يمكنك تنفيذ الأمثلة التالية المكتوبة بلغة كوتلن وجافا لفهم الفروقات بشكل عملي.

إليك بعض الميزات البارزة في لغة كوتلن بالمقارنة مع لغة جافا:

الخاصية كوتلن جافا الوصف
الدوال الإضافية Extension functions نعم لا تسمح لك بتوسيع صنف أو واجهة بوظائف جديدة من خلال تعريف التوابع أو الخصائص الإضافية فقط دون الحاجة إلى إنشاء أصناف جديدة
class Example {}<br />// extension function declaration fun Example.printHelloWorld() { println("Hello World!") }<br /><br />// extension function usage Example().printHelloWorld()
التحويلات الذكية Smart casts نعم لا تتبع الشروط داخل عبارة if الشرطية، وتحويل الأنواع تلقائياً بطريقة آمنة.<br /><br /> fun example(a: Any) { if (a is String)<br /> { println(a.length) <br />// automatic cast to String } }
كما توفر لغة كوتلن معاملات تحويل آمنة بين الأنواع تعيد null عند حدوث خطأ في عملية التحويل ومعاملات تحويل غير آمنة ترمي استثناء عند حدوث خطأ في التحويل
// unsafe "as" cast throws exceptions val a: String = b as String // safe "as?" cast returns null on failure val ? String? = d as? String
الدوال المباشرة Inline functions نعم لا تقلل من التحميل الزائد للذاكرة وتحسن سرعة الكود عن طريق تضمين رمز الدالة (نسخه إلى موقع الاستدعاء)
inline fun example()
دعم مدمج لمفهوم التفويض delegation نعم لا تدعم نمط التفويض بشكل مدمج باستخدام الكلمة المفتاحية by
class Derived(b: Base) : Base by b
كتابة أسماء مستعارة أو بديلة لأنماط البيانات نعم نعم توفر أسماء مختصرة أو مخصصة لأنماط البيانات والتوابع والأصناف لتسهيل قراءتها
typealias ShortName = LongNameExistingType
الحقول غير الخاصة بالصنف لا نعم توفر جافا كافة معاملات تعديل الوصول الأربعة وهي المحمي protected والافتراضي default المعروف أيضًا بمعامل الحزمة الخاص package-private بالإضافة إلى معامل الوصول العام public والخاص private. بينما تفتقد كوتلن لمعامل تعديل الوصول المحمي والافتراضي.
العامل الثلاثي Ternary operator لا نعم يستبدل عبارة if/else بكود أبسط وأكثر قابلية للقراءة:
if (firstExpression) { // if/else variable = secondExpression; } else { variable = thirdExpression; } // ternary operator variable = (firstExpression) ? secondExpression : thirdExpression;
توسيع نطاق البيانات بصورة ضمنية لا نعم تسمح لغة جافا بالتحويل التلقائي من نوع بيانات أصغر إلى نوع بيانات أكبر مثلًا من عدد صحيح إلى عشري بصورة تلقائية في حين لا تقوم كوتلن بذلك
int i = 10; long l = i; // first widening conversion: int to long float f = l; // second widening conversion: long to float
الاستثناءات المتحقق منها
Checked exceptions
لا نعم يحتاج المصرف إلى طريقة للتعامل مع الاستثناءات التي تقع عند تنفيذ البرنامج إما باستخدام الكلمة المفتاحية throws أو من خلال كتلة تعليمات try-catch
ملاحظة: تم تصميم الاستثناءات التي يجب التحقق منها لتشجيع المطورين على تصميم برمجيات قوية. ومع ذلك، يمكن أن تؤدي إلى هذه الاستثناءات لزيادة حجم الكود، وتجعل عملية إعادة التصميم صعبة، وتؤدي إلى معالجة سيئة للأخطاء عند استخدامها بطريقة غير صحيحة. لذا فإن مسألة تحديد فيما إذا كانت هذه الميزة إيجابية أم سلبية تعتمد على احتياجات المطورين.

هناك موضوع واحد تم استبعاده عمدًا من هذا الجدول وهو التعامل مع القيم الفارغة null في كل من لغتي كوتلن وجافا. إذ يستحق هذا الموضوع مقارنة أكثر تفصيلاً بين اللغتين لذا سنناقشه بشكل منفصل في الفقرة التالية.

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

إن ميزة عدم قبول القيم الفارغة هي واحدة من أروع ميزات كوتلن. إذ توفر هذه الميزة الوقت على المطورين ولا تضطرهم للتعامل مع الاستثناء من نوع NullPointerExceptions (وهو أحد الاستثناءات التي تطلق في وقت التشغيل RuntimeExceptions).

ففي لغة جافا يمكنك بشكل افتراضي تعيين قيمة فارغة لأي متغير على النحو التالي:

String x = null;

// Running this code throws a NullPointerException

try {

  System.out.println("First character: " + x.charAt(0));

} catch (NullPointerException e) {

  System.out.println("NullPointerException thrown!");

}

أما في لغة كوتلن فلديك خياران، إما تجعل المتغير يقبل قيم فارغة nullable أو لا يقبل قيم فارغة non-nullable كما يلي:

// This line throws a compile-time error because you can't assign a null value

nonNullableNumber = null

var nullableNumber: Int? = 2

 // This line does not throw an error since we used a nullable variable

nullableNumber = null

يفضل استخدام المتغيرات non-nullable بشكل افتراضي، وتجنب استخدام المتغيرات nullable للحصول على أفضل الممارسات.

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

الحالة مثال
عندما تبحث عن عنصر في قائمة غير موجود (عادةً عند التعامل مع بنية لتخزين ومعالجة البيانات). val list: List<Int> = listOf(1,2,3) val searchResultItem = list.firstOrNull { it == 0 } searchResultItem?.let { // Item found, do something } ?: run { // Item not found, do something }
عندما تريد تهيئة متغير في وقت التنفيذ وليس في لحظة الإعلان عنه باستخدام lateinit. lateinit var text: String fun runtimeFunction() { // e.g., Android onCreate text = "First text set" // After this, the variable can be used }

ينصح بعدم المبالغة في استخدام التعليمة lateinit التي تؤجل تهيئة المتغير حتى يتم الوصول إليه لأول مرة بشكل مفرط مع لغة كوتلن باستثناء الحالات التي لا يمكنك فيها معرفة قيمة المتغير عند إعلانه، أو عند الحاجة لربط العرض view bindings أي ربط عناصر واجهة المستخدم (مثل الأزرار والنصوص والصور وما إلى ذلك) بمتغيرات في الشيفرة البرمجية، كي تتمكن من لتحكم فيها والتفاعل معها من خلال العرض وإجراء حقن قيم للمتغيرات في وقت التشغيل variable injections في أندرويد.

@Inject // With the Hilt library, this is initialized automatically

lateinit var manager: SomeManager

lateinit var viewBinding: ViewBinding

fun onCreate() { // i.e., Android onCreate

 binding = ActivityMainBinding.inflate(layoutInflater, parentView, true)

 // ...

}

بشكل عام، تتعامل لغة كوتلن مع القيم الفارغة null بمرونة أكبر وتوفر تجربةً محسنةً مقارنةً بلغة جافا.

الاختلافات في الميزات المشتركة بين جافا وكوتلن

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

الميزة جافا كوتلن
كائنات نقل البيانات بين طبقات التطبيق المختلفة DTOs توفر سجلات جافا Java records طريقة مناسبة لنقل المعلومات عن البيانات أو حالة هذه البيانات كما تتضمن التوابع المساعدة toString و equals و hashCode بشكل افتراضي وهي متاحة منذ إصدار جافا SE 15:


public record Employee(
int id,
String firstName,
String lastName
)
توفر لغة كوتلن أصناف البيانات data classes وهي تعمل بشكل مشابه لسجلات جافا كما تتوفر فيها توابع مدمجة مساعدة toString و equals وcopy:


data class Employee(
val id: Int,
val firstName: String,
val lastName: String
)
تعبيرات لامدا Lambda expressions تتوفر تعبيرات لامدا في جافا منذ الإصدار جافا 8 وهي تملك بنية بسيطة كالتالي parameter -> expressionوتستخدم القوسين المتعرجين لتمرير الوسطاء(parameter1, parameter2) -> { code } كما في المثال التالي الذي يستخدم تعبيرات لامدا لصباعة عناصر قائمة أعداد صححية:


ArrayList ints = new ArrayList<>();
ints.add(5);
ints.add(9);
ints.forEach((i) -> {
System.out.println(i);
});
تكتب تعبيرات لامدا في كوتلن بالصيغة التالية { parameter1, parameter2 -> code } وتحيط بها دائمًا الأقواس المتعرجة
على سبيل المثال يستخدم الكود التالي تعبير لامدا لتعريف دالة بسيطة تقارن طول سلسلتين نصيتين: var p: List = listOf("firstPhrase", "secondPhrase") val isShorter = { s1: String, s2: String -> s1.length < s2.length } println(isShorter(p.first(), p.last()))
التزامن Concurrency توفر الخيوط threads في لغة جافا ميزة تنفيذ مهام متزامنة وتسهل الحزمة java.util.concurrency التعامل مع تعدد المهام من خلال توفير أصناف خاصة مثل Executor و ExecutorService (كما يمكن مشروع Project Loom لتحسين جافا من إنجاز التزامن بطريقة أسرع من خلال توفير خيوط خفيفة الوزن lightweight threads). تعمل الروتينات المساعدة في كوتلن التي توفرها مكتبة kotlinx.coroutines على تسهيل التزامن وتعدد المهام، كما تتضمن قسم خاص لتعدد الخيوط multithreading. ويساهم مدير الذاكرة في إصدار Kotlin 1.7.20 والإصدارات الأحدث بتقليل القيود السابقة على تنفيذ التزامن وتعدد الخيوط للمطورين الذين ينتقلون بين نظام التشغيل أندرويد Android وآي أو إس iOS.
السلوك الثابت في الأصناف Static behavior in classes تسهل الأعضاء الثابتة أو الستاتيكية static members في جافا مشاركة التعليمات البرمجية بين كائنات الصنف وتضمن إنشاء نسخة واحدة فقط من العنصر. ويمكن تحقيقها من خلال كتابة الكلمة المفتاحية static قبل المتغيرات والدوال والكتل: class Example { static void f() {//} } تتيح الكائنات المرافقة للأصناف companion objects في كوتلن من تحقيق السلوك الثابت للأصناف ومشاركة التعليمات البرمجية بين كائنات الصنف فالأعضاء في الكائن المرافق تكون مشتركة بين جميع كائنات الصنف ولا حاجة لإنشاء كائن منه لاستخدامها، ولكن صياغتها ليست بسيطة كما هو الحال في جافا:
إليك مثال على كيفية استخدام كائن مرفق في كوتلن:\ class Example { companion object { fun f() {//} } }

بالطبع، تملك كل من لغة البرمجة كوتلن وجافا أيضًا تراكيب مختلفة في كتابة التعليمات البرمجية، ولن نناقش كل الاختلافات هنا في سياق المقال الحالي، لكننا سنكتفي بالاطلاع على طريقة كتابة الحلقات التكرارية في كل لغة وهذا سيمنحك فكرة عن الأسلوب العام لكتابة تعليمات كل لغة:

نوع الحلقة جافا كوتلن
حلقة for باستخدام in for (int i=0; i<=5; i++) { System.out.println("printed 6 times"); } for (i in 0..5) { println("printed 6 times") }
حلقة for باستخدام until for (int i=0; i<5; i++) { System.out.println("printed 5 times"); } for (i in 0 until 5) { println("printed 5 times") }
forEach List<String> list = Arrays.asList("first", "second"); for (String value: list) { System.out.println(value); } var list: List<String> = listOf("first", "second") list.forEach { println(it) }
while int i = 5; while (i > 0) { System.out.println("printed 5 times"); i--; } var i = 5 while (i > 0) { println("printed 5 times") i-- }

احرص على الفهم العميق لميزات لغة كوتلن فهذا سيساعدك في التحول بين كوتلن وجافا بسهولة وسلاسة

هل أختار جافا أم كوتلن من أجل مشاريع أندرويد

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

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

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

كما أن استخدام لغة برمجة جديدة من قبل المطورين أمر يستحق النقاش حيث يمكن أن يفيد المطورين باختلاف خبراتهم إذ:

  • يستفيد المطورون المبتدئون من الموارد المناسبة.
  • يتحسن المطورون ذوو المستوى المتوسط ويحصلون على فرص أكبر للعمل.
  • يحتاج المطورون الكبار إلى القدرة على تصميم وتنفيذ شيفرات رائعة.

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

الخلاصة

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

ترجمة وبتصرف للمقال Kotlin vs. Java: All-purpose Uses and Android Apps للكاتب Gabriel Gircenko

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...