الكائنات المجهولة وتعبيرات الكائنات
استخدم تعبيرات object لإنشاء تطبيقات لمرة واحدة للواجهات.
الكائنات المجهولة وتعبيرات الكائنات درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
تعبيرات الكائن
ينشئ تعبير الكائن مثيلًا مجهولًا يُستخدم مرة واحدة لفئة أو واجهة، وهو ما يعادل الفئات الداخلية المجهولة في Java، لكنه أكثر قوة.
تنفيذ واجهة دون اسم
استخدم object : Interface { ... } لإنشاء تنفيذ مضمن.
interface ClickListener {
fun onClick(): String
}
fun main() {
val listener = object : ClickListener {
override fun onClick() = "clicked!"
}
println(listener.onClick())
}فئة مجهولة ذات حالة
يمكن للكائنات المجهولة الاحتفاظ بحالة وامتلاك عدة دوال.
fun main() {
val counter = object {
var count = 0
fun inc() { count++ }
fun show() = println("count = $count")
}
counter.inc(); counter.inc(); counter.inc()
counter.show()
}نوع الكائن المجهول
يُستنتج نوع الكائن المجهول تلقائيًا. وعند التصريح عنه على مستوى الدالة، تظل قادرًا على الوصول إلى أعضائه المخصصة.
fun main() {
val pair = object {
val left = "L"
val right = "R"
}
println("${pair.left} and ${pair.right}")
}إتاحة النوع المجهول
إذا أُعيد كائن مجهول من دالة ذات نوع مستنتج، فلن يرى المستدعون إلا النوع الفائق، وتصبح الإضافات الخاصة بالكائن المجهول غير متاحة من الخارج.
fun makeListener() = object {
fun greet() = "hello"
}
fun main() {
val l = makeListener()
println(l.greet()) // OK — same compilation unit
}واجهات متعددة
يمكن للكائن المجهول تنفيذ عدة واجهات ضمن تعبير واحد.
interface Closeable { fun close() }
interface Flushable { fun flush() }
fun main() {
val resource = object : Closeable, Flushable {
override fun close() = println("closed")
override fun flush() = println("flushed")
}
resource.flush()
resource.close()
}توسيع فئة
يمكن للكائنات المجهولة توسيع فئة مفتوحة مع تجاوز أعضائها.
open class Animal(val name: String) {
open fun speak() = "$name makes a sound"
}
fun main() {
val pet = object : Animal("Rex") {
override fun speak() = "$name barks!"
}
println(pet.speak())
}التقاط متغيرات النطاق المحيط
تحتفظ الكائنات المجهولة بإغلاق حول المتغيرات الموجودة في النطاق المحيط، فتقرأها وتعدّلها، بخلاف اشتراط Java أن تكون final.
fun main() {
var log = mutableListOf<String>()
val recorder = object {
fun record(s: String) { log.add(s) }
}
recorder.record("event 1")
recorder.record("event 2")
println(log)
}متى تستخدم الكائنات المجهولة
استخدم الكائنات المجهولة للتنفيذات التي تُستخدم مرة واحدة ولا تستحق فئة خاصة بها، مثل دوال الاستدعاء اللاحق والمستمعات والمقارنات.
fun main() {
val nums = listOf(3, 1, 4, 1, 5, 9, 2, 6)
val sorted = nums.sortedWith(object : Comparator<Int> {
override fun compare(a: Int, b: Int) = b - a // descending
})
println(sorted)
}فضّل Lambdas عند الإمكان
إذا كانت الواجهة تحتوي على دالة مجردة واحدة (SAM)، فسيكون lambda أوضح من تعبير الكائن.
fun main() {
val nums = listOf(3, 1, 4, 1, 5, 9)
// Old way:
val sorted1 = nums.sortedWith(object : Comparator<Int> {
override fun compare(a: Int, b: Int) = b - a
})
// New way — SAM conversion:
val sorted2 = nums.sortedWith(Comparator { a, b -> b - a })
println("$sorted1 / $sorted2")
}الكائن المجهول مقابل الكائن المصرّح به
استخدم object Name لإنشاء Singleton مسمّى. واستخدم object : Type داخل تعبير لإنشاء مثيل مجهول يُستخدم مرة واحدة.
// Named singleton (one instance, accessed globally)
object GlobalLogger { fun log(m: String) = println("[L] $m") }
// Anonymous (created at expression evaluation)
fun main() {
val local = object { fun hi() = "hi" }
GlobalLogger.log("hello")
println(local.hi())
}تحقق سريع
ما الصياغة التي تنشئ مثيلًا مجهولًا ينفذ واجهة بشكل مضمن؟
مراجعة
تنشئ تعبيرات الكائن مثيلات مجهولة تُستخدم مرة واحدة وبشكل مضمن. ويمكنها تنفيذ الواجهات وتوسيع الفئات والاحتفاظ بالحالة والاحتفاظ بإغلاق حول متغيرات النطاق المحيط. فضّل Lambdas للواجهات ذات الدالة الواحدة، واستخدم تعبيرات الكائن عندما تحتاج إلى عدة دوال أو إلى حالة.
الأسئلة الشائعة
هل درس «الكائنات المجهولة وتعبيرات الكائنات» مجاني؟
نعم — نص درس «الكائنات المجهولة وتعبيرات الكائنات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «الكائنات المجهولة وتعبيرات الكائنات»؟
استخدم تعبيرات object لإنشاء تطبيقات لمرة واحدة للواجهات. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الكائنات المجهولة وتعبيرات الكائنات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تصريح object: Singleton في Kotlin
- companion object: أعضاء شبيهة بالساكنة في Kotlin
- الكائنات المجهولة وتعبيرات الكائنات
- دوال Factory باستخدام companion object