apply وwith: التهيئة والإرجاع
استخدم apply وwith لتهيئة الكائنات وتعرّف على القيم التي تعيدانها.
apply وwith: التهيئة والإرجاع درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
مراجعة دوال النطاق
تتيح لك دوال النطاق في Kotlin، وهي (apply وalso وlet وrun وwith)، تنفيذ كتلة ضمن سياق كائن. وتختلف كل دالة بحسب المستقبِل (this أو it) والقيمة المُرجعة.
أساسيات apply
تنفذ apply { ... } الكتلة مع ربط this بالمستقبِل، ثم تُرجع المستقبِل نفسه. وهي مثالية لإعداد الكائنات.
class Person {
var name: String = ""
var age: Int = 0
}
fun main() {
val p = Person().apply {
name = "Ada"
age = 35
}
println("${p.name}, ${p.age}")
}لماذا تُعد apply مفيدة
من دون apply، ستحتاج إلى متغير مؤقت لإعداد الكائن ثم إرجاعه. وتختصر apply ذلك في تعبير واحد.
class Config {
var host: String = ""
var port: Int = 0
}
fun makeConfig(): Config {
// Without apply:
// val c = Config(); c.host = "x"; c.port = 8080; return c
return Config().apply {
host = "localhost"
port = 8080
}
}
fun main() {
val c = makeConfig()
println("${c.host}:${c.port}")
}استخدام apply ضمن سلسلة
تُرجع apply المستقبِل، ولذلك يمكن ربطها طبيعيًا باستدعاءات دوال أخرى.
class Builder {
val parts = mutableListOf<String>()
}
fun main() {
val result = Builder().apply {
parts.add("hello")
parts.add("world")
}.parts.joinToString(" ")
println(result) // hello world
}أساسيات with
تنفذ with(receiver) { ... } الكتلة مع كون this = المستقبِل، وتُرجع نتيجة اللامبدا (وليس المستقبِل). وهي مفيدة عندما تريد قيمة مشتقة.
class Rect(val w: Int, val h: Int)
fun main() {
val area = with(Rect(3, 4)) {
w * h
}
println(area) // 12
}apply مقارنةً بـ with
تُرجع apply المستقبِل، ولذلك فهي مثالية للمنشئات. أما with فتُرجع نتيجة اللامبدا، ولذلك فهي مثالية للحساب انطلاقًا من مستقبِل.
class Box(var width: Int = 0, var height: Int = 0)
fun main() {
val box = Box().apply { width = 10; height = 20 } // returns Box
val area = with(box) { width * height } // returns Int
println("$box area=$area")
}استخدام apply مع القوائم
اضبط مجموعة قابلة للتغيير ضمن السطر نفسه.
fun main() {
val list = mutableListOf<String>().apply {
add("a")
add("b")
add("c")
}
println(list)
}تُرجع apply النوع نفسه
يكون نوع القيمة المُرجعة من apply دائمًا نوع المستقبِل. ولا حاجة إلى إرجاع صريح.
class Sb {
private val buf = StringBuilder()
fun append(s: String): Sb { buf.append(s); return this }
fun build(): String = buf.toString()
}
fun main() {
val s = Sb().apply {
append("Hello, ")
append("Kotlin!")
}.build()
println(s)
}إعادة استخدام أعضاء متعددة مع with
تكون جميع أعضاء المستقبِل ضمن النطاق داخل with، لذلك لا تحتاج إلى السابقة obj..
class Person(val name: String, val age: Int)
fun main() {
val description = with(Person("Ada", 35)) {
"Name: $name, Age: $age, AgeNext: ${age + 1}"
}
println(description)
}تداخل apply
يمكنك تداخل apply داخل apply أخرى لإعداد هيكلي. استخدم ذلك باعتدال.
class Address {
var city: String = ""
var zip: String = ""
}
class User {
var name: String = ""
var address: Address = Address()
}
fun main() {
val u = User().apply {
name = "Ada"
address.apply {
city = "Istanbul"
zip = "34000"
}
}
println("${u.name} in ${u.address.city}")
}متى لا تستخدم apply
إذا لم تكن بحاجة إلى إرجاع المستقبِل، ففضّل الإنشاء العادي باستخدام الوسائط المُسمّاة أو let/run. لا تستخدم apply لمجرد التنويع.
class Config(val host: String, val port: Int)
fun main() {
// Named arguments often beat builder + apply:
val cfg = Config(host = "localhost", port = 8080)
println("${cfg.host}:${cfg.port}")
}تحقق سريع
ماذا تُرجع apply بعد تنفيذ كتلتها؟
مراجعة
تنفّذ apply كتلةً يكون فيها this = المستقبِل، ثم تعيد المستقبِل — وهذا مثالي لتهيئة الكائنات. تنفّذ with كتلةً يكون فيها this = المستقبِل، ثم تعيد نتيجة اللامبدا — وهذا مثالي للقيم المشتقة. استخدم الوسائط المسمّاة عندما تكون التهيئة بسيطة.
الأسئلة الشائعة
هل درس «apply وwith: التهيئة والإرجاع» مجاني؟
نعم — نص درس «apply وwith: التهيئة والإرجاع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «apply وwith: التهيئة والإرجاع»؟
استخدم apply وwith لتهيئة الكائنات وتعرّف على القيم التي تعيدانها. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «apply وwith: التهيئة والإرجاع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- apply وwith: التهيئة والإرجاع
- let وrun: التحويل وتحديد النطاق
- also: التأثيرات الجانبية من دون تغيير المستقبل
- اختيار دالة النطاق المناسبة: دليل اتخاذ القرار