التابع Any.equals()‎ في لغة Kotlin

من موسوعة حسوب

تبين الدالة equals()‎ إذا ما كان الكائن المُمرّر إليها يساوي الكائن الذي استدعيت عبره. وأيُّ تعريف لاستخدام (Implementations) هذه الدالة يجب أن يكون:

  • انعكاسيًا (Reflexive): لكل مرجع x لا يساوي null، يجب أن تُعيد العبارة x.equals(x)‎ القيمة true.
  • تماثليًَا (Symmetric): لكل قيمتين مرجعيتين x و y لا تساويان null، العبارة x.equals (y)‎ ستعيد القيمة true إذا وفقط إذا أعادت العبارة y.equals (x)‎ القيمة true.
  • تواتريًا (Transitive):  لكل القيم المرجعية x و y و z التي تخالف null، إن كانت العبارتان x.equals (y)‎ و y.equals (z)‎ تعيدان القيمة true فستعيد العبارة  x.equals (z)‎ القيمة true كذلك.
  • متسقًا (Consistent): لكل قيمتين مرجعيتين x و y لا تساويان null، فإنّ استدعاء الدالة x.equals (y)‎ سيُرجع دائمًا إحدى القيمتين true أو false، شريطة عدم تغيير أي معلومة تستخدمها الدالة equals()‎ لأجل مقارنة الكائنين.

تذكر أن العامل == في أكواد Kotlin سيُترجم إلى استدعاءٍ للدالة equals()‎‎‎‎ عندما يكون كلا الكائنين المُقارَنَين مخالفين للقيمة null.

البنية العامة

open operator fun equals(other: Any?): Boolean

ويُلاحظ وجود الكلمة المفتاحية operator للدلالة على أنّ هذا التابع مرتبط بمعامل الفهرسة المذكور سابقًا. وكذلك الكلمة open التي تسمح بتعديل هذه الدالة في الأصناف الوارثة.

القيم المعادة

true إن كان الكائن المُمرّر للدالة يساوي الكائن الذي استدعيت عبره، أو false خلاف ذلك.

أمثلة

استخدام الدالة equals()‎ مع السلاسل النصية

تُعرّف الشيفرة الآتية سلستين نصيتين a و b ثم تستدعي الدالة equals()‎ عبر الكائن a لمقارنته مع b، ثم تستخدم التعليمة الشرطية if لطباعة نتيجة المقارنة:

fun main(args: Array<String>) {
   var a: String = "hsoub corp"
   var b: String = "hsoub " + "corp"   

   if(a.equals(b)){
       println("'$a' = '$b'")
 
  } else {
       println("'$a' != '$b'")
   }
}

النتيجة المطبوعة هي:

'hsoub corp' = 'hsoub corp'

انظر أيضًا

  • ()hashCode: تعيد التكويد (hash code) الخاص بالكائن.
  • ()toString: تعيد تمثيلًا نصيًا للكائن.

مصادر