Kotlin لا يعيش في فراغ: لماذا وكيف نتعامل مع اللغات الأخرى
\n\nتخيل: أنت تكتب بلغة Kotlin — لغة حديثة وموجزة وآمنة. لكن مشروعك ليس صفحة بيضاء. في مكان ما في أعماق النظام، يوجد كود قديم بلغة Java، ويحتاج المحللون مكتبة بلغة Python، وللعمليات منخفضة المستوى تحتاج إلى C. أو تريد إعادة استخدام منطق الأعمال في الواجهة الأمامية، بكتابته بلغة Kotlin، لكن JavaScript هي المسيطرة هناك.
\n\nالخبر السار: تكامل Kotlin مع اللغات الأخرى ليس ألمًا، بل قوة خارقة. تم تصميم Kotlin ليكون "لغة ربط". يمكنه العمل على JVM (بجانب Java)، والترجمة إلى كود أصلي (Kotlin/Native)، وحتى إلى JavaScript (Kotlin/JS).
\n\nفي هذه المقالة، سنشرح أربعة سيناريوهات رئيسية لـ تفاعل Kotlin مع اللغات الأخرى بأمثلة عملية. ستتعلم كيفية استدعاء Python من Kotlin، ودمج كود C عبر JNI، والعمل بسلاسة مع Java، وحتى استخدام Kotlin في الواجهة الأمامية. هيا بنا!
\n\n1. Kotlin وJava: توأم الروح من السطور الأولى
\n\nالسيناريو الأكثر وضوحًا وبساطة هو تفاعل Kotlin Java. نظرًا لأن Kotlin يتم ترجمته إلى كود بايت JVM، فهو متوافق بنسبة 100% مع Java. يمكنك استدعاء أي كود Java من Kotlin والعكس صحيح — بدون جسور أو محولات أو ألم.
\n\nكيفية استدعاء Java من Kotlin
\nلنفترض أن لديك كلاس Java قديم للتعامل مع التواريخ:
\n\n// Java: DateUtils.java\npublic class DateUtils {\n public static String formatDate(long timestamp) {\n return new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date(timestamp));\n }\n}\n\n\nفي Kotlin، تستخدمه كما لو كان أصليًا:
\n\n// Kotlin\nfun main() {\n val formatted = DateUtils.formatDate(System.currentTimeMillis())\n println("اليوم: $formatted") // اليوم: 2025-04-03\n}\n\n\nكل شيء يعمل "مباشرة". لكن هناك فروق دقيقة: أمان null. Java لا تعرف عن الأنواع القابلة للصفر في Kotlin، لذلك عند استدعاء دوال Java، يعامل Kotlin القيم المُعادة كـ أنواع منصة (مثل String!). نصيحة: حدد النوع دائمًا بوضوح أو استخدم !! / ?. بحكمة.
كيفية استدعاء Kotlin من Java
\nالتوافق العكسي موجود أيضًا. لنفترض أن لديك ملف Kotlin:
\n\n// Kotlin: Calculator.kt\npackage utils\n\nobject Calculator {\n @JvmStatic\n fun sum(a: Int, b: Int): Int = a + b\n}\n\n\nمن Java، نستدعيه هكذا:
\n\n// Java\nimport utils.Calculator;\n\npublic class Main {\n public static void main(String[] args) {\n int result = Calculator.sum(5, 3);\n System.out.println(result); // 8\n }\n}\n\n\nالمهم هو عدم نسيان التعليق @JvmStatic للدوال الثابتة و @JvmName لحل تعارضات الأسماء. تكامل Kotlin مع Java وثيق جدًا لدرجة أنه يمكنك خلط اللغتين في مشروع واحد — وهذا هو المعيار لتطوير Android والعديد من الخوادم الخلفية على Spring.
2. Kotlin وPython: عالمين، JVM واحدة (وGraalVM)
\n\nهذا أكثر إثارة للاهتمام. Kotlin Python ليس رابطًا تافهًا، لكنه ممكن. لا يوجد جسر أصلي مباشر، لكن يمكننا استخدام حلول JVM.
\n\nالخيار A: GraalVM — تشغيل Python على JVM
\nGraalVM هي آلة افتراضية يمكنها تشغيل عدة لغات (Java وKotlin وJavaScript وPython وRuby) في عملية واحدة. هذه أداة مثالية لـ تكامل Kotlin مع Python.
\n\nقم بتثبيت GraalVM وأضف دعم Python:
\n\ngu install python\n\n\nالآن في كود Kotlin، يمكن استدعاء دوال Python:
\n\n// Kotlin (GraalVM Polyglot API)\nimport org.graalvm.polyglot.*\n\nfun main() {\n val context = Context.create("python")\n // تنفيذ