0Pricing
Kotlin Academy · درس

expect وactual

تنفيذات خاصة بالمنصة

expect وactual درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

الحاجة إلى شيفرة خاصة بالمنصة

لا يملك بعض الوظائف تطبيقًا مشتركًا — مثل الحصول على اسم نظام التشغيل أو UUID أو المنصة الحالية. يحل KMM هذه المشكلة باستخدام آلية expect/actual.

إعلانات expect

تعلنون في commonMain عن دالة أو فئة expect — وهي عقد بلا جسم. ويمكن للشيفرة المشتركة استدعاؤها.

// commonMain
expect fun platformName(): String

‏actual على Android

توفر كل منصة تطبيقًا من نوع actual يطابق التوقيع.

// androidMain
actual fun platformName(): String = "Android " + android.os.Build.VERSION.SDK_INT

‏actual على iOS

توفر مجموعة مصادر iOS نسختها الخاصة باستخدام واجهات برمجة التطبيقات الأصلية.

// iosMain
import platform.UIKit.UIDevice

actual fun platformName(): String =
    UIDevice.currentDevice.systemName + " " + UIDevice.currentDevice.systemVersion

استخدامه في الشيفرة المشتركة

تستدعي الشيفرة المشتركة الدالة المتوقعة كما لو كانت موجودة؛ ويربط المترجم actual الصحيح بكل هدف.

// commonMain
class Platform {
    val name: String get() = platformName()
}

فئات expect

يمكنكم توقّع فئة كاملة. وتوفر كل منصة فئة actual بأعضاء مطابقين.

// commonMain
expect class FileReader(path: String) {
    fun read(): String
}

تطبيقات الفئات الفعلية

تطبّق المنصات الفئة المتوقعة باستخدام واجهات برمجة تطبيقات الملفات الأصلية (مثل Java IO على Android وFoundation على iOS).

// androidMain
actual class FileReader actual constructor(private val path: String) {
    actual fun read(): String = java.io.File(path).readText()
}

expect مع typealias

يمكن أن يكون actual عبارة عن typealias لنوع موجود في المنصة، مما يلغي الحاجة إلى غلاف.

// commonMain
expect class Uuid

// jvm/androidMain
actual typealias Uuid = java.util.UUID

قواعد مطابقة التوقيع

يجب أن يطابق actual ‏expect مطابقة تامة: الاسم نفسه والمعلمات نفسها ونوع الإرجاع نفسه. ويؤدي عدم التطابق إلى خطأ في الترجمة، مما يضمن الاتساق بين المنصات.

متى لا تستخدمون expect/actual

فضّلوا الواجهات مع تطبيقات المنصة التي تُحقن أثناء التشغيل عندما يكون التجريد أكثر مرونة. وخصّصوا expect/actual للبدائيات الصغيرة والثابتة الخاصة بالمنصة.

مثال توضيحي للشيفرة المشتركة

خارج KMM، تتمثل الفكرة نفسها ببساطة في استدعاء تجريد. وهنا تحل دالة عادية محل استدعاء المنصة.

fun platformName(): String = "Demo Platform"

fun main() {
    println("Running on " + platformName())
}

تحقق سريع

أين يُكتب إعلان expect، وأين توجد تطبيقات actual الخاصة به؟

مراجعة

تسد expect/actual الفجوات بين المنصات:

  • يعلن expect عن العقد في commonMain
  • يطبّقه actual لكل منصة (أو باستخدام typealias)
  • يجب أن تتطابق التوقيعات تمامًا
  • فضّلوا الواجهات للتجريدات المرنة

التالي: مشاركة منطق الأعمال.

الأسئلة الشائعة

هل درس «expect وactual» مجاني؟

نعم — نص درس «expect وactual» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

ماذا ستتعلم في «expect وactual»؟

تنفيذات خاصة بالمنصة تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟

لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «expect وactual»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟

نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بنية مشروع KMM
  2. expect وactual
  3. مشاركة منطق الأعمال
  4. واجهات API للمنصة
← العودة إلى Kotlin Academy