الفئات المتداخلة
فئات داخل فئات
الفئات المتداخلة درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
الفئات داخل الفئات
تتيح لك Kotlin تعريف فئة داخل فئة أخرى. وتكون هذه الفئة، افتراضيًا، متداخلة ولا تحتفظ بمرجع إلى مثيل الفئة الخارجية.
class Outer {
class Nested {
fun hello() = "Hi from Nested"
}
}
fun main() {
println(Outer.Nested().hello())
}إنشاء مثيل متداخل
بما أن الفئة المتداخلة مستقلة، تنشئها باستخدام اسم الفئة الخارجية من دون مثيل خارجي: Outer.Nested().
class Computer {
class Cpu {
val cores = 8
}
}
fun main() {
val cpu = Computer.Cpu()
println(cpu.cores)
}عدم الوصول إلى أعضاء الفئة الخارجية
لا يمكن للفئة المتداخلة رؤية أعضاء المثيل في الفئة الخارجية لأنها لا تملك مرجعًا خارجيًا. وهي تتصرف كفئة على المستوى الأعلى ضمن نطاق اسم معين.
class Bank {
val name = "ACME"
class Branch {
fun describe() = "A branch"
}
}
fun main() {
println(Bank.Branch().describe())
}لماذا نستخدم التداخل؟
يعبّر التداخل عن تجميع منطقي: ينتمي النوع الداخلي من الناحية المفاهيمية إلى النوع الخارجي، مما يحسّن التنظيم ونطاقات الأسماء.
class Http {
class Request(val url: String)
}
fun main() {
val r = Http.Request("/home")
println(r.url)
}الفئة المتداخلة مع خصائص
الفئات المتداخلة هي فئات عادية؛ إذ يمكن أن تحتوي على مُنشئات وخصائص وأساليب.
class Garage {
class Car(val model: String) {
fun honk() = "$model: beep"
}
}
fun main() {
println(Garage.Car("Tesla").honk())
}الوصول إلى أعضاء Companion أو الأعضاء الشبيهة بـ static
يمكن الإشارة إلى الفئات المتداخلة من أي مكان باستخدام اسم الفئة الخارجية، بطريقة مشابهة للفئة المتداخلة الساكنة في Java.
class Config {
class Defaults {
val timeout = 30
}
}
fun main() {
println(Config.Defaults().timeout)
}فئات متداخلة متعددة
يمكن للفئة الخارجية أن تحتوي على عدة فئات متداخلة لتجميع الأنواع المرتبطة معًا.
class Shapes {
class Circle(val r: Int)
class Square(val side: Int)
}
fun main() {
println(Shapes.Circle(5).r)
println(Shapes.Square(4).side)
}تداخل داخل تداخل
يمكنك التداخل لأكثر من مستوى، لكن التداخل العميق قد يضر بقابلية القراءة.
class A {
class B {
class C {
val value = 42
}
}
}
fun main() {
println(A.B.C().value)
}المتداخلة مقابل ذات المستوى الأعلى
من الناحية الوظيفية، تشبه الفئة المتداخلة فئة ذات مستوى أعلى؛ والاختلاف الوحيد هو اسمها المؤهل. اختر التداخل عندما تساعد العلاقة بين الأنواع على وضوح الشيفرة.
class Order {
class Item(val price: Int)
}
fun main() {
val total = Order.Item(10).price + Order.Item(5).price
println(total)
}تجميع عملي
إن تجميع نوع نتيجة المُنشئ أسفل مالكه يجعل الشيفرة تبدو طبيعية.
class Parser {
class Result(val ok: Boolean, val message: String)
fun parse(text: String) = Result(text.isNotEmpty(), "parsed")
}
fun main() {
val res = Parser().parse("data")
println("${res.ok} ${res.message}")
}قاعدة أساسية يجب تذكرها
الكلمة المفتاحية التي تجعل الفئة تحتفظ بمرجع إلى الفئة الخارجية هي inner. من دونها، تكون الفئة المتداخلة شبيهة بالفئة الساكنة ومعزولة.
class Box {
class Lid
}
fun main() {
println(Box.Lid() != null)
}تحقق سريع
اختبر مدى فهمك للفئات المتداخلة.
مراجعة
لقد تعلمت عن الفئات المتداخلة:
- تُعلن داخل فئة أخرى، والقيمة الافتراضية هي
class(متداخلة). - لا تحتوي على مرجع إلى مثيل الفئة الخارجية، ولا يمكنها الوصول إلى أعضائها.
- تُنشأ باستخدام اسم الفئة الخارجية:
Outer.Nested(). - مفيدة جدًا للتجميع المنطقي وإنشاء نطاقات الأسماء.
class Outer {
class Nested { val x = 1 }
}
fun main() {
println(Outer.Nested().x)
}الأسئلة الشائعة
هل درس «الفئات المتداخلة» مجاني؟
نعم — نص درس «الفئات المتداخلة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «الفئات المتداخلة»؟
فئات داخل فئات تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «الفئات المتداخلة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الفئات المتداخلة
- الفئات الداخلية
- الكائنات المجهولة
- الفئات المحلية