Kotlin Academy · درس

تصريح object: Singleton في Kotlin

أنشئ Singleton باستخدام object وتعرّف على دورة حياتها.

الدرس 1 من 413 خطوة

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

‏object بوصفه Singleton

ينشئ التصريح object مثيلًا واحدًا — وهو Singleton آمن للخيوط وتتم تهيئته بتكاسل — وذلك باستخدام سطر واحد من التعليمات البرمجية.

التصريح عن Singleton

استخدم object Name { ... } للتصريح عن Singleton ذي حالة ودوال.

object Logger {
    fun log(msg: String) = println("[LOG] $msg")
}
fun main() {
    Logger.log("App started")
    Logger.log("User signed in")
}

حالة Singleton

يمكن لـ Singletons الاحتفاظ بحالة قابلة للتغيير — ويمكن الوصول إليها من أي مكان، كما تكون مشتركة عالميًا.

object Counter {
    var count = 0
    fun increment() { count++ }
}
fun main() {
    Counter.increment()
    Counter.increment()
    Counter.increment()
    println(Counter.count) // 3
}

التهيئة بالتكاسل

يُنشأ المثيل الوحيد عند أول وصول إليه — وليس قبل ذلك. ويضمن JVM أن تكون هذه العملية آمنة للخيوط.

object Heavy {
    init { println("Initializing Heavy...") }
    fun work() = "done"
}
fun main() {
    println("Before access")
    println(Heavy.work()) // triggers init now
    println(Heavy.work()) // no init again
}

تنفيذ الواجهات

يمكن لـ Singletons تنفيذ الواجهات، وهو أمر مفيد لعمليات الاستدعاء العكسي والاستراتيجيات.

interface Greeter { fun greet(name: String): String }
object EnglishGreeter : Greeter {
    override fun greet(name: String) = "Hello, $name!"
}
fun main() {
    println(EnglishGreeter.greet("Ada"))
}

توسيع فئة

يمكن للكائنات أن ترث من الفئات المفتوحة أيضًا.

open class Animal(val sound: String) {
    fun makeSound() = "The animal says $sound"
}
object Cat : Animal("Meow")
fun main() {
    println(Cat.makeSound())
}

تطبيق عملي: الإعدادات

تُعد Singletons مثالية للإعدادات الشاملة للتطبيق التي لا تتغير بعد بدء التشغيل.

object AppConfig {
    val apiUrl = "https://api.example.com"
    val timeout = 5000
    val version = "1.0.0"
}
fun main() {
    println("v${AppConfig.version} -> ${AppConfig.apiUrl}")
}

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

اجمع الدوال المساعدة المترابطة عديمة الحالة في object بوصفها دوال شبيهة بالدوال الساكنة ضمن مساحة أسماء.

object StringUtils {
    fun reverse(s: String) = s.reversed()
    fun capitalize(s: String) = s.replaceFirstChar { it.uppercase() }
}
fun main() {
    println(StringUtils.reverse("Kotlin"))
    println(StringUtils.capitalize("hello"))
}

المساواة والهوية

لا يوجد سوى مثيل واحد، ولذلك تعيد === القيمة true دائمًا عند استخدام مرجع الكائن نفسه.

object MySingleton
fun main() {
    val a = MySingleton
    val b = MySingleton
    println(a === b) // true
}

‏object في مقابل class

تحتاج class العادية إلى إنشاء مثيل. أما object فهو المثيل نفسه — ولا يوجد استدعاء للباني.

class Service { fun ping() = "pong (class)" }
object SingletonService { fun ping() = "pong (object)" }
fun main() {
    val s = Service() // instance per call
    println(s.ping())
    println(SingletonService.ping()) // no instantiation
}

أمان الخيوط

يكون إنشاء مثيل Singleton آمنًا للخيوط بفضل ضمانات تحميل الفئات في JVM. أما أي حالة قابلة للتغيير تضيفها داخله فهي مسؤوليتك.

object SharedCounter {
    @Volatile var count = 0
    @Synchronized fun inc() { count++ }
}
fun main() {
    repeat(1000) { SharedCounter.inc() }
    println(SharedCounter.count) // 1000
}

تحقق سريع

كم عدد المثيلات الموجودة لتصريح Kotlin من نوع object؟

مراجعة

يصرّح object Name { ... } عن Singleton كسول وآمن للخيوط، وله حالة ودوال وواجهات وتوريث. استخدم objects للإعدادات ومجموعات الدوال المساعدة والخدمات عديمة الحالة.

البدء مجانًا

تعلم Kotlin مع معلم ذكاء اصطناعي — مجانًا

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

الدورات
51
الدروس
203

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

هل درس «تصريح object: Singleton في Kotlin» مجاني؟

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

ماذا ستتعلم في «تصريح object: Singleton في Kotlin»؟

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

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

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

كم من الوقت يستغرق درس «تصريح object: Singleton في Kotlin»؟

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

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

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

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

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