الفرق بين المراجعتين لصفحة: «Kotlin/this expressions»

من موسوعة حسوب
إظهار المحتويات بشكل دائم
ط استبدال النص - 'Kotlin Functions' ب'Kotlin Function'
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 5: سطر 5:
* تعبِّر الكلمة المفتاحيّة <code>this</code> في أيّ من عناصر [[Kotlin/classes|الصنف]] (class member) عن الكائن (object) الحاليّ من هذا الصنف.
* تعبِّر الكلمة المفتاحيّة <code>this</code> في أيّ من عناصر [[Kotlin/classes|الصنف]] (class member) عن الكائن (object) الحاليّ من هذا الصنف.


* وتعبِّر في [[Kotlin/extensions|الدالة الإضافيّة (extension functions)]] أو [[Kotlin/lambdas|قيمة الدالة مع المستقبِل (function literal with receiver)]] عن متحول المستقبِل الذي سيُمرَّر على الطرف اليساريّ من النقطة <code>.</code>.
* وتعبِّر في [[Kotlin/extensions|الدالة الإضافيّة (extension functions)]] أو [[Kotlin/lambdas|قيمة الدالة مع المستقبِل (function literal with receiver)]] عن معامل المستقبِل الذي سيُمرَّر على الطرف اليساريّ من النقطة <code>.</code>.


وإذا لم يكن هناك أي تقييدٍ (qualification) مرتبطٍ مع الكلمة المفتاحيّة <code>this</code> فإنها ستعبِّر عن أقرب مجالٍ (scope) داخليّ محيطٍ بها (enclosing)، وللتعبير عن  مجالٍ آخر فتُستخدَم التسمية لتقييدها (qualified this).
وإذا لم يكن هناك أي تقييدٍ (qualification) مرتبطٍ مع الكلمة المفتاحيّة <code>this</code> فإنها ستعبِّر عن أقرب مجالٍ (scope) داخليّ محيطٍ بها (enclosing)، وللتعبير عن  مجالٍ آخر فتُستخدَم التسمية لتقييدها (qualified this).
سطر 39: سطر 39:
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Lambdas]]
[[تصنيف:Kotlin Lambdas]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Function]]
__لصق_فهرس__
__لصق_فهرس__

المراجعة الحالية بتاريخ 11:37، 30 أغسطس 2018

تعبير this

يُستخدم التعبير this لتحديد المستقبِل (receiver) الحاليّ، ويختلف ذلك بحسب الحالتين:

  • تعبِّر الكلمة المفتاحيّة this في أيّ من عناصر الصنف (class member) عن الكائن (object) الحاليّ من هذا الصنف.

وإذا لم يكن هناك أي تقييدٍ (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
            }
        }
    }
}

مصادر