0Pricing
Kotlin Academy · درس

كتل init وترتيب التهيئة

استخدم كتل init وتعرّف على ترتيب تهيئة الخصائص والكتل.

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

ما هي كتلة init؟

تحتوي كتلة init { } على الشيفرة التي تُشغَّل عند إنشاء مثيل. وهي جزء من منطق المُنشئ الأساسي.

كتلة init بسيطة

تُشغَّل كتلة init أثناء الإنشاء، بعد مهيئات الخصائص وبحسب ترتيب ظهورها في الشيفرة المصدرية.

class Logger(val name: String) {
    init {
        println("Constructed Logger("$name")")
    }
}
fun main() {
    val l = Logger("auth")
}

التحقق في init

استخدم require أو check داخل init لفرض الثوابت البرمجية وقت الإنشاء.

class Percentage(val value: Int) {
    init {
        require(value in 0..100) { "value must be 0..100, was $value" }
    }
}
fun main() {
    println(Percentage(75).value)
    // Percentage(150) // throws IllegalArgumentException
}

كتل init متعددة

يمكنك استخدام عدة كتل init؛ وتُنفَّذ بترتيب ظهورها في الشيفرة المصدرية، بالتناوب مع مهيئات الخصائص.

class Demo(val x: Int) {
    init { println("First init, x=$x") }
    val doubled = x * 2
    init { println("Second init, doubled=$doubled") }
}
fun main() {
    Demo(5)
}

مهيئات الخصائص وترتيب init

تُنفَّذ مهيئات الخصائص وكتل init من الأعلى إلى الأسفل وفق ترتيبها في الشيفرة المصدرية. ويجب إسناد قيمة إلى الخاصية قبل استخدامها.

class Order {
    val createdAt = System.currentTimeMillis()
    init { println("created at $createdAt") }
    val nextId = 1
    init { println("next id = $nextId") }
}
fun main() {
    Order()
}

لا يمكن استخدام الخصائص قبل تهيئتها

تؤدي الإشارة إلى خاصية قبل تشغيل مهيئها إلى خطأ في الترجمة.

class Bad {
    init {
        // println(name) // ERROR: name not yet initialized
    }
    val name = "after init"
}
fun main() { Bad() }

حساب الخصائص المشتقة

استخدم كتل init لحساب حالة مشتقة تعتمد على عدة معاملات للمُنشئ.

class Rectangle(val width: Int, val height: Int) {
    val area: Int
    init {
        area = width * height
    }
}
fun main() {
    val r = Rectangle(4, 5)
    println("area = ${r.area}") // 20
}

الآثار الجانبية: التسجيل

استخدم init لإجراء إعداد غير بسيط، مثل التسجيل أو التخصيص أو التسجيل في خدمة.

class Service(val name: String) {
    init {
        println("[BOOT] starting service '$name'")
    }
}
fun main() {
    Service("auth")
    Service("payments")
}

ترتيب init مع الفئات الفرعية

تُشغَّل init الخاصة بالفئة الأساسية قبل init الخاصة بالفئة الفرعية. وتُهيَّأ خصائص كل فئة وفق ترتيب ظهورها في الشيفرة المصدرية.

open class Base {
    init { println("Base init") }
}
class Sub : Base() {
    init { println("Sub init") }
}
fun main() { Sub() }

تجنب المنطق المكلف في init

تؤدي كتل init طويلة التنفيذ إلى إبطاء كل عملية إنشاء. ضع في اعتبارك التهيئة الكسولة أو دوال المصنع إذا كان الإعداد مكلفًا.

class Heavy(val n: Int) {
    val data: List<Int> by lazy { (1..n).toList() }
}
fun main() {
    val h = Heavy(1_000_000)
    println("Created without computing data")
    println("First element: ${h.data[0]}") // now data initializes
}

دمج init مع المنشئات الثانوية

تفوّض المنشئات الثانوية إلى المُنشئ الأساسي، وتُشغَّل كتل init باعتبارها جزءًا من مسار المُنشئ الأساسي.

class Box(val content: String) {
    init { println("init for '$content'") }
    constructor(): this("empty") { println("secondary done") }
}
fun main() {
    Box()
}

تحقق سريع

ما ترتيب تنفيذ كتل init المتعددة ومهيئات الخصائص في فئة Kotlin؟

مراجعة

تحتوي كتل init على منطق وقت الإنشاء، مثل التحقق والخصائص المشتقة والآثار الجانبية. وتُنفَّذ الكتل المتعددة بترتيب ظهورها في الشيفرة المصدرية، بالتناوب مع مهيئات الخصائص. تجنب العمليات المكلفة في init، واستخدم lazy أو دوال المصنع بدلًا منها.

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

هل درس «كتل init وترتيب التهيئة» مجاني؟

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

ماذا ستتعلم في «كتل init وترتيب التهيئة»؟

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

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

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

كم من الوقت يستغرق درس «كتل init وترتيب التهيئة»؟

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

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

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

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

  1. المنشئ الأساسي ومعاملات الخصائص
  2. كتل init وترتيب التهيئة
  3. أدوات Getter وSetter مخصصة مع field
  4. ‏lateinit والتهيئة الكسولة
← العودة إلى Kotlin Academy