كيف تجتاز مقابلة Kotlin: أفضل الأسئلة من الألف إلى الياء

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

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

ابدأ الدورة

كيف تجتاز مقابلة Kotlin: أفضل الأسئلة من الألف إلى الياء

\n\n

مقابلة Kotlin ليست مجرد اختبار للقواعد النحوية. يريد أصحاب العمل رؤية أنك تفهم فلسفة اللغة: الأمان من القيم الخالية، الأسلوب الوظيفي، التعابير الاصطلاحية وخصائص التجميع. في هذه المقالة، قمنا بتحليل الأسئلة الأكثر شيوعًا - من الأساسية إلى المتقدمة. استعد للمقابلة بنسبة 100%.

\n\n

1. الأسئلة الأساسية: القواعد النحوية و null safety

\n\n

عادةً ما تبدأ المقابلة بالأساسيات. إليك ما يجب أن تعرفه بالتأكيد.

\n\n

ما هي أنواع البيانات في Kotlin وكيف تختلف عن Java؟

\n

Kotlin هي لغة مكتوبة بشكل ثابت. جميع الأنواع هي كائنات، لا توجد أنواع بدائية (لكن يمكن للمُجمّع تحسينها). الأنواع الرئيسية: Int، Double، Boolean، String، Array. على عكس Java، لا يوجد new في Kotlin لإنشاء الكائنات، ويتم تمييز الأنواع القابلة للقيم الخالية صراحةً بعلامة ?.

\n\n

ما هو null safety وكيف يطبقه Kotlin؟

\n

Null safety هو حماية مدمجة من NullPointerException. تنقسم الأنواع إلى قابلة للقيم الخالية (String?) وغير قابلة للقيم الخالية (String). للوصول الآمن، استخدم العوامل التالية:

\n
val name: String? = null\nprintln(name?.length)       // استدعاء آمن -> null\nprintln(name?.length ?: 0)  // عامل الإلفيس -> 0\nprintln(name!!.length)      // إجبار -> NPE، إذا كان null
\n\n

ما الفرق بين val و var؟

\n
    \n
  • val - مرجع غير قابل للتغيير (للقراءة فقط). مشابه لـ final في Java.
  • \n
  • var - مرجع قابل للتغيير (قابل للتحوير).
  • \n
\n

هام: val لا يضمن عدم قابلية تغيير الكائن نفسه، فقط المرجع.

\n\n

2. الهياكل المتقدمة: الفئات، الدوال و sealed

\n\n

هنا يتم اختبار القدرة على كتابة كود موجز وآمن.

\n\n

ما هو data class وما هي الدوال التي يولدها؟

\n

data class هو فئة مخصصة لتخزين البيانات. يقوم المُجمّع تلقائيًا بتوليد: equals()، hashCode()، toString()، copy()، و componentN().

\n
data class User(val id: Int, val name: String)\nval user = User(1, "Alice")\nval copy = user.copy(name = "Bob")\nprintln(user) // User(id=1, name=Alice)
\n\n

ما هو sealed class ومتى يتم استخدامه؟

\n

sealed class هو تسلسل هرمي محدود للفئات. يجب الإعلان عن جميع الفئات الفرعية في نفس الملف. مثالي لتمثيل الحالات (مثل نتيجة التحميل).

\n
sealed class Result {\n    data class Success(val data: String) : Result()\n    data class Error(val message: String) : Result()\n    object Loading : Result()\n}\n\nfun handle(result: Result) = when (result) {\n    is Result.Success -> println(result.data)\n    is Result.Error -> println(result.message)\n    Result.Loading -> println("Loading...")\n}
\n

الميزة: يجب أن يكون when شاملاً - سيتحقق المُجمّع من جميع الخيارات.

\n\n

ما هي extension functions وكيف تعمل؟

\n

تسمح extension functions بإضافة دالة جديدة إلى فئة موجودة دون وراثة. في الواقع، هي دوال ثابتة تأخذ مثيل الفئة كوسيط أول.

\n
fun String.isEmail(): Boolean = this.contains("@")\nprintln("test@mail.ru".isEmail()) // true
\n\n

3. البرمجة الوظيفية: اللامبدا، المجموعات، نطاقات الرؤية

\n\n

يستخدم Kotlin بشكل نشط الأسلوب الوظيفي. كن مستعدًا للأسئلة حول العمل مع المجموعات ودوال النطاق.

\n\n

ما هي دوال النطاق (scope functions) التي تعرفها؟ كيف تختلف؟

\n

الأساسية: let، run، with، apply، also. الفرق الرئيسي هو السياق (this أو it) والقيمة المُرجعة.

\n\n

المدونات

توصيات الكتب

الدالةالسياق