0Pricing
Kotlin Academy · درس

دوال Factory باستخدام companion object

نفّذ أنماط Factory باستخدام companion object ومعامل invoke.

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

نمط Factory Method

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

باني خاص مع مصنع

اجعل الباني خاصًا، ووفّر أساليب المصنع عبر الكائن المرافق.
class Token private constructor(val value: String) {
    companion object {
        fun generate() = Token(java.util.UUID.randomUUID().toString())
        fun fromString(s: String) = Token(s.trim())
    }
}
val t = Token.generate()

أساليب مصنع مسمّاة

توضح الأسماء الوصفية الغرض بجلاء، بخلاف التحميل الزائد للباني.
class Duration private constructor(val ms: Long) {
    companion object {
        fun ofMillis(ms: Long) = Duration(ms)
        fun ofSeconds(s: Long) = Duration(s * 1000)
        fun ofMinutes(m: Long) = Duration(m * 60_000)
    }
}
val d = Duration.ofMinutes(5)

إرجاع null من المصنع

يمكن للمصانع إرجاع null عند إدخال قيم غير صالحة بدلًا من إطلاق استثناء.
class Percentage private constructor(val value: Int) {
    companion object {
        fun of(value: Int): Percentage? {
            return if (value in 0..100) Percentage(value) else null
        }
    }
}
val p = Percentage.of(75) ?: error("Invalid")

المثيلات المخزنة مؤقتًا

يمكن للمصانع تخزين المثيلات مؤقتًا وإعادة استخدامها.
class Direction private constructor(val name: String) {
    companion object {
        private val cache = mutableMapOf<String, Direction>()
        fun of(name: String) = cache.getOrPut(name.uppercase()) {
            Direction(name.uppercase())
        }
    }
}

عامل invoke كمصنع يشبه الباني

عرّف invoke() لاستدعاء الفئة كما لو كانت دالة.
class Email private constructor(val address: String) {
    companion object {
        operator fun invoke(raw: String): Email {
            require("@" in raw) { "Invalid email" }
            return Email(raw.lowercase())
        }
    }
}
val e = Email("Test@Example.com")  // looks like a constructor

مصنع مجرد مع الفئات sealed

ادمج أساليب المصنع مع تسلسلات الفئات sealed لإنشاء مثيلات ذات أنواع محددة.
sealed class Shape {
    data class Circle(val r: Double) : Shape()
    data class Rect(val w: Double, val h: Double) : Shape()
    companion object {
        fun circle(r: Double) = Circle(r)
        fun rect(w: Double, h: Double) = Rect(w, h)
    }
}

مصنع يراعي التبعيات

يمكن للمصانع قبول التبعيات وربطها معًا.
class Repository(private val db: Database) {
    companion object {
        fun create(db: Database = Database.instance) = Repository(db)
    }
    fun findAll() = db.query("SELECT * FROM items")
}

المصنع في الاختبارات

تجعل أساليب المصنع إنشاء كائنات الاختبار واضحًا ونظيفًا.
class Order private constructor(
    val id: Long, val items: List<String>, val paid: Boolean
) {
    companion object {
        fun unpaid(id: Long, items: List<String>) = Order(id, items, false)
        fun paid(id: Long, items: List<String>) = Order(id, items, true)
    }
}

من JSON/Config

تُعد المصانع نقاط دخول طبيعية لتحليل البيانات.
class AppConfig private constructor(
    val baseUrl: String, val timeout: Int
) {
    companion object {
        fun fromEnv() = AppConfig(
            baseUrl = System.getenv("BASE_URL") ?: "http://localhost",
            timeout = System.getenv("TIMEOUT")?.toInt() ?: 30
        )
    }
}

متى لا تستخدم الباني الخاص

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

تحقق سريع

ما دالة العامل التي تتيح استدعاء كائن مرافق كما لو كان بانيًا: Email("a@b.com")؟

مراجعة

أساليب المصنع في الكائنات المرافقة: باني خاص مع مصانع مسمّاة، وإمكانية إرجاع null، والتخزين المؤقت، واستخدام invoke() لصياغة تشبه الباني. تجعل المصانع إنشاء الكائنات آمنًا وواضحًا وقابلًا للاختبار!

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

هل درس «دوال Factory باستخدام companion object» مجاني؟

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

ماذا ستتعلم في «دوال Factory باستخدام companion object»؟

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

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

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

كم من الوقت يستغرق درس «دوال Factory باستخدام companion object»؟

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

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

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

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

  1. تصريح object: Singleton في Kotlin
  2. ‏companion object: أعضاء شبيهة بالساكنة في Kotlin
  3. الكائنات المجهولة وتعبيرات الكائنات
  4. دوال Factory باستخدام companion object
← العودة إلى Kotlin Academy