الفرق بين المراجعتين لصفحة: «Kotlin/this expressions»
< Kotlin
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:تعبير <code>this</code>}}</noinclude> == تعبير <code>this</code> == يُستخدم التعبير <code>this</code> لتحديد ال...' |
إظهار المحتويات بشكل دائم |
||
سطر 40: | سطر 40: | ||
[[تصنيف:Kotlin Lambdas]] | [[تصنيف:Kotlin Lambdas]] | ||
[[تصنيف:Kotlin Functions]] | [[تصنيف:Kotlin Functions]] | ||
__لصق_فهرس__ |
مراجعة 16:40، 8 مارس 2018
تعبير this
يُستخدم التعبير this
لتحديد المستقبِل (receiver) الحاليّ، ويختلف ذلك بحسب الحالتين:
- تعبِّر الكلمة المفتاحيّة
this
في أيّ من عناصر الصنف (class member) عن الكائن (object) الحاليّ من هذا الصنف.
- وتعبِّر في الدالة الإضافيّة (extension functions) أو قيمة الدالة مع المستقبِل (function literal with receiver) عن متحول المستقبِل الذي سيُمرَّر على الطرف اليساريّ من النقطة
.
.
وإذا لم يكن هناك أي تقييدٍ (qualification) مرتبطٍ مع الكلمة المفتاحيّة this
فإنها ستعبِّر عن أقرب مجالٍ (scope) داخليّ محيطٍ بها (enclosing)، وللتعبير عن مجالٍ آخر فتُستخدَم التسمية لتقييدها (qualified this).
this
المُقيَّدة
كي تعبِّر الكلمة المفتاحيّة this
عن مجالٍ (scope) خارجيّ (مثل مجال صنف (class) أو دالة إضافيّة (extension functions) أو قيمة الدالة مع المستقبِل (function literal with receiver) ) فتُكتب بالصيغة this@label
حيث تكون @label
تسميةً للمجال الذي تتبع له this
، مثل:
class A { // تسمية ضمنيّة باسم @A
inner class B { // تسمية ضمنيّة باسم @B
fun Int.foo() { // تسمية ضمنيّة باسم @foo
val a = this@A // تابعة للصنف A
val b = this@B // تابعة للصنف B
val c = this // مستقبِل الدالة وهو قيمة صحيحة
val c1 = this@foo // مستقبل الدالة وهو قيمة صحيحة
val funLit = lambda@ fun String.() {
val d = this // funLit مستقبل
}
val funLit2 = { s: String ->
// مستقبِل الدالة foo()
// لأنه لا يوجد أي مستقبِل في تعبير lambda
val d1 = this
}
}
}
}