الفرق بين المراجعتين لصفحة: «Kotlin/Any/equals»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
| سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: التابع Any.equals() في لغة Kotlin}}</noinclude> | <noinclude>{{DISPLAYTITLE: التابع Any.equals() في لغة Kotlin}}</noinclude> | ||
تبين الدالة <code>equals()</code> إذا ما كان الكائن المُمرّر إليها يساوي الكائن الذي استدعيت عبره. وأيُّ تعريف لاستخدام | تبين الدالة <code>equals()</code> إذا ما كان الكائن المُمرّر إليها يساوي الكائن الذي استدعيت عبره. وأيُّ تعريف لاستخدام هذه الدالة يجب أن يكون: | ||
* انعكاسيًا (Reflexive): لكل مرجع <code>x</code> لا يساوي <code>null</code>، يجب أن تُعيد العبارة <code>x.equals(x)</code> القيمة <code>true</code>. | * انعكاسيًا (Reflexive): لكل مرجع <code>x</code> لا يساوي <code>null</code>، يجب أن تُعيد العبارة <code>x.equals(x)</code> القيمة <code>true</code>. | ||
* تماثليًَا (Symmetric): لكل قيمتين مرجعيتين <code>x</code> و <code>y</code> لا تساويان <code>null</code>، العبارة <code>x.equals (y)</code> | * تماثليًَا (Symmetric): لكل قيمتين مرجعيتين <code>x</code> و <code>y</code> لا تساويان <code>null</code>، ستعيد العبارة <code>x.equals (y)</code> القيمة <code>true</code> إذا وفقط إذا أعادت العبارة <code>y.equals (x)</code> القيمة <code>true</code>. | ||
* تواتريًا (Transitive): لكل القيم المرجعية <code>x</code> و <code>y</code> و <code>z</code> التي | * تواتريًا (Transitive): لكل القيم المرجعية <code>x</code> و <code>y</code> و <code>z</code> التي لا تساوي <code>null</code>، ستعيد العبارة <code>x.equals (z)</code> القيمة <code>true</code> إن كانت العبارتان <code>x.equals (y)</code> و <code>y.equals (z)</code> تعيدان القيمة <code>true</code> أيضًا. | ||
* متسقًا (Consistent): لكل قيمتين مرجعيتين <code>x</code> و <code>y</code> لا تساويان <code>null</code>، | * متسقًا (Consistent): لكل قيمتين مرجعيتين <code>x</code> و <code>y</code> لا تساويان <code>null</code>، سيعيد استدعاء الدالة <code>x.equals (y)</code> دائمًا إحدى القيمتين <code>true</code> أو <code>false</code> شريطة عدم تغيير أي معلومة تستخدمها الدالة <code>equals()</code> لأجل مقارنة الكائنين. | ||
تذكر | تذكر أنَّ العامل <code>==</code> في أكواد Kotlin سيُترجم إلى استدعاءٍ للدالة <code>equals()</code> عندما يكون كلا الكائنين المُقارَنَين مخالفين للقيمة <code>null</code>. | ||
== البنية العامة == | == البنية العامة == | ||
<syntaxhighlight lang="kotlin"> | <syntaxhighlight lang="kotlin"> | ||
open operator fun equals(other: Any?): Boolean | open operator fun equals(other: Any?): Boolean | ||
</syntaxhighlight> | </syntaxhighlight>يُلاحظ وجود الكلمة المفتاحيَّة <code>operator</code> للدلالة على أنّ هذا التابع مرتبط بمعامل الفهرسة المذكور سابقً، والكلمة <code>open</code> التي تسمح بتعديل هذه الدالة في الأصناف الوارثة. | ||
== القيم المعادة == | == القيم المعادة == | ||
<code>true</code> إن كان الكائن المُمرّر للدالة يساوي الكائن الذي استدعيت عبره، أو <code>false</code> خلاف ذلك. | القيمة المنطقية <code>true</code> إن كان الكائن المُمرّر للدالة يساوي الكائن الذي استدعيت عبره، أو <code>false</code> خلاف ذلك. | ||
== أمثلة == | == أمثلة == | ||
=== استخدام الدالة <code>equals()</code> مع السلاسل النصية === | === استخدام الدالة <code>equals()</code> مع السلاسل النصية === | ||
تُعرّف الشيفرة الآتية سلستين نصيتين <code>a</code> و <code>b</code> ثم تستدعي الدالة <code>equals()</code> عبر الكائن <code>a</code> | تُعرّف الشيفرة الآتية سلستين نصيتين <code>a</code> و <code>b</code> ثم تستدعي الدالة <code>equals()</code> عبر الكائن <code>a</code> لموازنته مع <code>b</code>، ثم تستخدم التعليمة الشرطية <code>if</code> لطباعة النتيجة:<syntaxhighlight lang="kotlin"> | ||
fun main(args: Array<String>) { | fun main(args: Array<String>) { | ||
var a: String = "hsoub corp" | var a: String = "hsoub corp" | ||
| سطر 37: | سطر 37: | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* <code>[[Kotlin/Any/hashCode|()hashCode]]</code>: | * التابع <code>[[Kotlin/Any/hashCode|()hashCode]]</code>: يعيد التكويد (hash code) الخاص بالكائن. | ||
* <code>[[Kotlin/Any/toString|()toString]]</code>: | * التابع <code>[[Kotlin/Any/toString|()toString]]</code>: يعيد تمثيلًا نصيًا للكائن. | ||
== مصادر == | == مصادر == | ||
مراجعة 07:08، 3 يوليو 2018
تبين الدالة equals() إذا ما كان الكائن المُمرّر إليها يساوي الكائن الذي استدعيت عبره. وأيُّ تعريف لاستخدام هذه الدالة يجب أن يكون:
- انعكاسيًا (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 (z) القيمةtrueإن كانت العبارتانx.equals (y)وy.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: يعيد تمثيلًا نصيًا للكائن.