كيف تجتاز مقابلة Kotlin: أهم الأسئلة والإجابات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة
```html

كيف تجتاز مقابلة Kotlin: تحليل أهم الأسئلة مع أمثلة



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



1. Null Safety: كيف تحل Kotlin مشكلة null



من أهم مميزات Kotlin هي الحماية المدمجة من NullPointerException. في المقابلة، سيُطلب منك بالتأكيد شرح الأنواع القابلة للقيمة null (nullable) وغير القابلة للقيمة null (non-null).



السؤال: ما الفرق بين String? و String؟ كيف تعمل بأمان مع nullable؟



الإجابة: النوع String يضمن أن المتغير لن يكون null أبدًا. String? يسمح بقيمة null. للوصول الآمن، تُستخدم العوامل ?. و ?: (Elvis) و !! (فقط إذا كنت متأكدًا 100%).



fun main() {    val name: String? = null        // استدعاء آمن    println(name?.length) // null        // قيمة افتراضية    val length = name?.length ?: 0    println(length) // 0        // استخراج إجباري (خطر NPE)    // println(name!!.length) // خطأ!}


سؤال إضافي: ما هما lateinit و lazy؟

  • lateinit — للمتغيرات التي تتم تهيئتها لاحقًا (فقط var).
  • lazy — للتهيئة المفوضة (فقط val).


class User {    lateinit var email: String        val config by lazy { loadConfig() }        fun init() {        email = "test@example.com"    }}


2. الكوروتينات (Coroutines): البرمجة غير المتزامنة بدون ألم



الكوروتينات (coroutines) هي أمر لا غنى عنه في Kotlin الحديث. يختبر القائمون على المقابلة فهمك لـ suspend و launch و async والموزعين (Dispatchers).



السؤال: ما الفرق بين launch و async؟



الإجابة: launch يبدأ كوروتين ويعيد Job (بدون نتيجة). async يعيد Deferred، والذي يمكنك الحصول على النتيجة منه عبر await().



suspend fun fetchData(): String {    delay(1000)    return "تم تحميل البيانات"}

fun main() = runBlocking { // launch: بدون نتيجة val job = launch { println("تم تنفيذ المهمة 1") } // async: مع نتيجة val deferred = async { fetchData() } println(deferred.await()) // "تم تحميل البيانات" job.join()}


السؤال: ما الموزعين (Dispatchers) التي تعرفها؟

  • Dispatchers.Main — لواجهة المستخدم (UI) في Android.
  • Dispatchers.IO — للإدخال/الإخراج والشبكة.
  • Dispatchers.Default — للمهام كثيفة الاستخدام لوحدة المعالجة المركزية (CPU).
  • Dispatchers.Unconfined — غير مرتبط بمؤشر ترابط معين (يستخدم نادرًا).


3. دوال الامتداد (Extension functions) والفئات المختومة (Sealed class): توسيع الإمكانيات



تسمح Kotlin بإضافة دوال جديدة إلى الفئات الموجودة دون الحاجة إلى الوراثة. غالبًا ما يُسأل عن هذا في سياق البنية المعمارية.



السؤال: ما هي دوال الامتداد (extension functions)؟ أعط مثالاً.



الإجابة: هي دوال يتم تعريفها خارج الفئة، ولكن يتم استدعاؤها كواحدة من توابعها. لا تقوم بتعديل الفئة، بل تضيف فقط سكرًا نحويًا (syntactic sugar).



// دالة امتداد لـ Stringfun String.isEmail(): Boolean {    return this.contains("@") && this.contains(".")}

fun main() { val email = "user@example.com" println(email. ```

المدونات

توصيات الكتب