0Pricing
Kotlin Academy · درس

اختيار دالة النطاق المناسبة: دليل اتخاذ القرار

اختر دالة النطاق الصحيحة بناءً على المستقبل ونوع القيمة المُعادة والهدف.

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

خمس دوال ومحوران

تختلف دوال النطاق في Kotlin وفق محورين: أسلوب المستقبِل (this أو it) والقيمة المُعادة (المستقبِل أو نتيجة اللامبدا). اختر الدالة بناءً على الغرض.

مصفوفة الاختيار

apply: this / المستقبِل. also: it / المستقبِل. run: this / اللامبدا. let: it / اللامبدا. with: this / اللامبدا (من دون مستقبِل عبر النقطة).

apply: التهيئة وإعادة القيمة

استخدم apply لتهيئة الكائنات ضمن سلسلة بأسلوب المُنشئ.

class Config {
    var host: String = ""
    var port: Int = 0
}
fun main() {
    val cfg = Config().apply {
        host = "localhost"
        port = 8080
    }
    println("${cfg.host}:${cfg.port}")
}

also: الآثار الجانبية

استخدم also للتسجيل أو التحقق أو تشغيل أثر جانبي مع تمرير المستقبِل عبر السلسلة.

fun main() {
    val items = listOf(1, 2, 3, 4)
        .also { println("got ${it.size} items") }
        .filter { it % 2 == 0 }
    println(items)
}

let: التحويل والنطاق الآمن تجاه null

استخدم let للتحويلات الآمنة تجاه null أو لحصر نطاق متغيّر.

fun main() {
    val name: String? = "Ada"
    val length = name?.let { it.length } ?: 0
    println(length)
}

run: الوصول إلى عدة أعضاء مع إرجاع نتيجة

استخدم run عند حساب نتيجة من عدة أعضاء في المستقبِل — فهي توفّر عليك سوابق it..

class User(val name: String, val age: Int)
fun main() {
    val description = User("Ada", 35).run {
        "Name: $name, Age: $age"
    }
    println(description)
}

with: تجميع العمليات على كائن موجود

استخدم with(obj) { ... } عندما لا تتحكم في موضع الاستدعاء (لا توجد سلسلة تبدأ بنقطة)، لكنك تريد تجميع العمليات باستخدام this.

class Builder {
    val parts = mutableListOf<String>()
    fun add(s: String) { parts.add(s) }
    fun build(): String = parts.joinToString("-")
}
fun main() {
    val b = Builder()
    val result = with(b) {
        add("hello")
        add("kotlin")
        build()
    }
    println(result) // hello-kotlin
}

الاختيار بناءً على الغرض

اسأل نفسك: (1) هل أحتاج إلى إعادة المستقبِل أم إلى نتيجة مشتقة؟ (2) هل أفضّل this أم it؟ تحدد الإجابتان الدالة المناسبة.

class Box { var w = 0; var h = 0; fun area() = w * h }
fun main() {
    // Configure and return Box -> apply
    val box = Box().apply { w = 3; h = 4 }
    // Compute area from box -> let or run
    val area = box.let { it.area() }
    // Side effect, keep box -> also
    val sameBox = box.also { println("area=${it.area()}") }
    println("$box / $area / $sameBox")
}

مقارنة: apply و also

تعيد كلتاهما المستقبِل. تستخدم apply القيمة this (وهي مناسبة لتعيين الحقول). أما also فتستخدم it (وهي مناسبة للإشارة إلى المستقبِل صراحةً، وغالبًا ضمن الآثار الجانبية).

class Item { var name = "" }
fun main() {
    val a = Item().apply { name = "apply" } // implicit this
    val b = Item().also { it.name = "also" } // explicit it
    println("${a.name} / ${b.name}")
}

مقارنة: let و run

تعيد كلتاهما نتيجة اللامبدا. تستخدم let القيمة it (وهي مناسبة للتحويلات البسيطة وللتعامل الآمن مع null). أما run فتستخدم this (وهي مناسبة عند استدعاء عدة أعضاء).

class Calculator(val a: Int, val b: Int) {
    fun sum() = a + b
    fun product() = a * b
}
fun main() {
    val calc = Calculator(3, 4)
    val s = calc.let { it.sum() }                  // simple
    val combo = calc.run { "sum=${sum()} product=${product()}" } // multi-member
    println("$s / $combo")
}

مسار عملي

غالبًا ما تستخدم السلسلة الواقعية عدة دوال نطاق معًا.

class Request(var url: String = "", var headers: Map<String, String> = emptyMap())
fun main() {
    val response = Request()
        .apply {
            url = "https://api.example.com"
            headers = mapOf("Accept" to "json")
        }
        .also { println("request: ${it.url}") }
        .let { req -> "GET ${req.url}" }
    println(response)
}

ورقة مرجعية

مرجع سريع لاختيار الأداة المناسبة.

// apply: this, returns receiver — configure object
// also: it, returns receiver — side effects in chain
// let: it, returns lambda result — transform / null-safety
// run: this, returns lambda result — multi-member compute
// with: this, returns lambda result — group operations on existing obj
fun main() { println("Scope functions: pick by receiver style + return value") }

اختبار سريع

أي دالة نطاق تستخدم this بوصفه المستقبِل، وتعيد المستقبِل نفسه أيضًا؟

مراجعة

اختر دالة النطاق بناءً على الغرض: apply (تهيئة + إعادة القيمة نفسها)، وalso (أثر جانبي + إعادة القيمة نفسها)، وlet (تحويل باستخدام it)، وrun (تحويل باستخدام this)، وwith (تجميع العمليات على كائن موجود). يحدد المحوران — أسلوب المستقبِل والقيمة المُعادة — الاختيار الصحيح.

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

هل درس «اختيار دالة النطاق المناسبة: دليل اتخاذ القرار» مجاني؟

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

ماذا ستتعلم في «اختيار دالة النطاق المناسبة: دليل اتخاذ القرار»؟

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

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

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

كم من الوقت يستغرق درس «اختيار دالة النطاق المناسبة: دليل اتخاذ القرار»؟

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

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

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

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

  1. ‏apply وwith: التهيئة والإرجاع
  2. ‏let وrun: التحويل وتحديد النطاق
  3. ‏also: التأثيرات الجانبية من دون تغيير المستقبل
  4. اختيار دالة النطاق المناسبة: دليل اتخاذ القرار
← العودة إلى Kotlin Academy