with
جمّعوا العمليات
with درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
دالة with
إن with دالة نطاق تأخذ كائنًا بوصفه معاملًا، وليس مستقبلًا لاستدعاء، وتشغّل كتلةً يكون فيها ذلك الكائن هو this. وتُرجع نتيجة اللامبدا.
الاستخدام الأساسي لـ with
تمرّر الكائن إلى with، ثم تصل إلى أعضائه مباشرةً داخل الكتلة.
fun main() {
val name = "Kotlin"
val description = with(name) {
"$this has $length characters"
}
println(description)
}تجميع عمليات متعددة
تتألق with عندما تحتاج إلى استدعاء عدة أساليب أو قراءة عدة خصائص للكائن نفسه. فهي تغنيك عن تكرار اسم الكائن.
fun main() {
val sb = StringBuilder()
with(sb) {
append("Line 1\n")
append("Line 2\n")
append("Line 3")
}
println(sb)
}تستخدم with القيمة this
مثل run وapply، تكشف with عن الكائن باسم this، لذلك لا تحتاج إلى بادئة عند الوصول إلى الأعضاء.
data class Rectangle(val width: Int, val height: Int)
fun main() {
val rect = Rectangle(4, 5)
val area = with(rect) {
width * height
}
println("Area: $area")
}تُرجع with نتيجة اللامبدا
تصبح قيمة آخر تعبير في الكتلة نتيجة with، تمامًا كما يحدث في run.
fun main() {
val list = listOf(1, 2, 3, 4, 5)
val summary = with(list) {
"Size=$size, First=${first()}, Last=${last()}"
}
println(summary)
}with في مقابل run
تنفّذ with(obj) { ... } وobj.run { ... } الشيء نفسه تقريبًا. والاختلاف بينهما في الصياغة:
- إن
runامتداد يُستدعى على الكائن، ولذلك تعمل بصورة جيدة مع الاستدعاءات الآمنة. - تأخذ
withالكائن بوصفه معاملًا، وتُقرأ طبيعيًا بمعنى «مع هذا الكائن، نفّذ...».
fun main() {
val s = "data"
val a = with(s) { uppercase() }
val b = s.run { uppercase() }
println("$a $b")
}with ليست للقيم القابلة لـ null
بما أن الكائن يُمرَّر بوصفه معاملًا، لا تتكامل with بسلاسة مع معامل الاستدعاء الآمن. وبالنسبة إلى المستقبلات القابلة لـ null، يُفضّل استخدام obj?.run { } أو obj?.let { }.
fun main() {
val name: String? = "Eve"
name?.run { println("Hello $this") }
println("with is awkward for nullables")
}القراءة والحساب معًا
من الأنماط الشائعة قراءة عدة خصائص وحساب نتيجة واحدة، كل ذلك داخل كتلة واحدة سهلة القراءة.
data class Order(val items: Int, val pricePerItem: Int)
fun main() {
val order = Order(3, 20)
val total = with(order) {
items * pricePerItem
}
println("Total: $total")
}إنشاء السلاسل النصية باستخدام with
عند دمجها مع buildString أو StringBuilder، تنشئ with تعليمات إنشاء واضحة من دون بادئات.
fun main() {
val report = StringBuilder()
with(report) {
appendLine("Report")
appendLine("======")
appendLine("All good")
}
print(report)
}استخدام with مع مجموعة
يمكنك استدعاء العديد من دوال المجموعات على القائمة نفسها من دون تكرار اسمها.
fun main() {
val numbers = listOf(10, 20, 30)
with(numbers) {
println("Sum: ${sum()}")
println("Max: ${max()}")
println("Average: ${average()}")
}
}متى تستخدم with
اختر with عندما يكون لديك كائن غير قابل لـ null وتريد تنفيذ مجموعة من العمليات عليه، مع إمكانية إرجاع نتيجة. فهي توحي بأنك «تعمل مع هذا الكائن لبعض الوقت».
تحقق سريع
كيف تتلقى with الكائن الخاص بها؟
مراجعة
تجمع with العمليات على كائن واحد غير قابل لـ null يُمرَّر بوصفه معاملًا، وتكشف عنه باسم this، وتُرجع نتيجة اللامبدا. وهي تشبه run، لكن بصياغة المعامل. ستتعلم بعد ذلك كيفية اختيار دالة النطاق المناسبة لكل موقف.
الأسئلة الشائعة
هل درس «with» مجاني؟
نعم — نص درس «with» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «with»؟
جمّعوا العمليات تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «with»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.