also: التأثيرات الجانبية من دون تغيير المستقبل
استخدم also للتسجيل وتصحيح الأخطاء والعمليات التي تقتصر على التأثيرات الجانبية.
also: التأثيرات الجانبية من دون تغيير المستقبل درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
نظرة سريعة على also
تنفّذ also كتلةً يكون فيها المستقبِل هو it، ثم تعيد المستقبِل دون تغيير. وهي مثالية للآثار الجانبية — مثل التسجيل وتصحيح الأخطاء والتحقق — من دون تعطيل السلسلة.
أساسيات also
تنفّذ also { ... } أثرًا جانبيًا، ثم تعيد القيمة نفسها، بحيث تستمر الاستدعاءات بسلاسة.
fun main() {
val nums = listOf(1, 2, 3, 4)
.also { println("input: $it") }
.filter { it % 2 == 0 }
.also { println("filtered: $it") }
println(nums)
}استخدام also للتسجيل
أضف عبارات التسجيل في منتصف المسار من دون قطع تدفقه.
fun main() {
val processed = " Hello, Kotlin! "
.also { println("raw: '$it'") }
.trim()
.also { println("trimmed: '$it'") }
.uppercase()
println(processed)
}استخدام also لتصحيح الأخطاء
استخدم also لفحص الحالة الوسيطة أثناء إعادة الهيكلة — ويمكنك حذفها لاحقًا من دون تغيير السلسلة.
fun main() {
val sum = (1..5).toList()
.also { println("list: $it") }
.sum()
.also { println("sum: $it") }
println("final: $sum")
}also مقارنةً بـ apply
تستخدم apply القيمة this (وهي أفضل للتعيينات). أما also فتستخدم it (وهي أفضل للمراجع الصريحة وللآثار الجانبية).
class Counter {
var value: Int = 0
}
fun main() {
val c = Counter().apply { value = 10 } // uses this implicitly
val d = Counter().also { it.value = 10 } // uses it explicitly
println("${c.value} / ${d.value}")
}استخدام also للآثار الجانبية أثناء التهيئة
تفيد عندما تحتاج إلى تنفيذ إجراء على كائن أثناء إنشائه، من دون أن يكون ذلك الإجراء تعيين خاصية.
class Repository {
val cache = mutableMapOf<String, String>()
fun init() = println("Repository initialized")
}
fun main() {
val r = Repository().also { it.init() }
r.cache["key"] = "value"
println(r.cache)
}تعيد also القيمة الأصلية
يمرّ المستقبِل دون تغيير — ولذلك يسهل ربط الاستدعاءات في سلسلة.
fun main() {
val len = "Hello".also { println("got: $it") }.length
println(len) // 5
}استخدام also للتحقق
نفّذ التأكيدات في منتصف السلسلة.
fun main() {
val n = listOf(1, 2, 3, 4)
.filter { it > 0 }
.also { require(it.isNotEmpty()) { "must have positives" } }
.sum()
println(n)
}دمج also و let
استخدم also للآثار الجانبية وlet للتحويل ضمن المسار نفسه.
fun main() {
val raw: String? = " 42 "
val n = raw
?.also { println("raw: '$it'") }
?.let { it.trim().toIntOrNull() }
?.also { println("parsed: $it") }
println(n)
}استخدام also للإضافة إلى مجموعة
أضف كائنًا مُنشأً إلى قائمة ضمن السلسلة مباشرةً.
class User(val name: String)
fun main() {
val users = mutableListOf<User>()
val ada = User("Ada").also { users.add(it) }
val ben = User("Ben").also { users.add(it) }
println(users.map { it.name })
}متى تستخدم also
استخدم also عندما تحتاج إلى أثر جانبي، مثل التسجيل أو التحقق أو التسجيل في نظام، مع رغبتك في استمرار القيمة الأصلية عبر السلسلة.
fun main() {
val total = listOf(10, 20, 30, 40, 50)
.also { println("count: ${it.size}") }
.filter { it >= 30 }
.also { println("kept: $it") }
.sum()
println("total: $total")
}نمط مضاد: استخدام also لإعادة التعيين
لا تستخدم also عندما تحتاج فعليًا إلى تحويل القيمة — فهذا هو دور let/run.
fun main() {
val name = "ada"
// BAD: also returns receiver, so upper is wrong
// val upper = name.also { it.uppercase() } // upper == "ada"
val upper = name.let { it.uppercase() }
println(upper) // ADA
}اختبار سريع
ما القيمة التي تعيدها also بعد تنفيذ كتلتها؟
مراجعة
تنفّذ also كتلة أثر جانبي باستخدام it، ثم تعيد المستقبِل. استخدمها للتسجيل وتصحيح الأخطاء والتحقق والتسجيل — في أي موضع تحتاج فيه إلى فحص القيمة من دون تغييرها. أما للتحويلات، فاستخدم let أو run بدلًا منها.
الأسئلة الشائعة
هل درس «also: التأثيرات الجانبية من دون تغيير المستقبل» مجاني؟
نعم — نص درس «also: التأثيرات الجانبية من دون تغيير المستقبل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «also: التأثيرات الجانبية من دون تغيير المستقبل»؟
استخدم also للتسجيل وتصحيح الأخطاء والعمليات التي تقتصر على التأثيرات الجانبية. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «also: التأثيرات الجانبية من دون تغيير المستقبل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- apply وwith: التهيئة والإرجاع
- let وrun: التحويل وتحديد النطاق
- also: التأثيرات الجانبية من دون تغيير المستقبل
- اختيار دالة النطاق المناسبة: دليل اتخاذ القرار