الفرق بين المراجعتين ل"Kotlin/collections/any"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الدالة any()‎ في لغة Kotlin}}</noinclude> تُعيد الدالة <code>any()‎</code> القيمة <code>true</code> إن كا...')
 
ط
 
(5 مراجعات متوسطة بواسطة 3 مستخدمين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة any()‎ في لغة Kotlin}}</noinclude>
+
<noinclude>{{DISPLAYTITLE: الدالة <code>any()‎</code> في Kotlin}}</noinclude>
 +
يختلف سلوك الدالة <code>any()‎</code> بحسب طريقة استدعائها، وسنناقش هذه الحالات تباعًا.
  
تُعيد الدالة <code>any()‎</code> القيمة <code>true</code> إن كانت كل عناصر المصفوفة أو المُكرّر (Iterable) الذي استُدعيت عبره تحقق العبارة المنطقية (predicate) المحددة، أو <code>false</code> خلاف ذلك.
+
== حالات استدعاء الدالة <code>any()‎</code> ==
 +
* في حال استدعاء الدالة <code>any()‎</code> مع مصفوفة (array) أو مجموعة (collection) دون تمرير أيّ معامل (parameter) لها، فستعيد القيمة <code>true</code> إن كانت المصفوفة أو المجموعة تحتوي على عنصر ٍ واحدٍ على الأقل (أي أنها غير فارغة)، وتعيد القيمة <code>false</code> بخلاف ذلك.
 +
* في حال تمرير دالةٍ ما كوسيطٍ (parameter) في الدالة <code>any()‎</code> فستعيد القيمة <code>true</code> إن كان هناك واحدٌ على الأقل من عناصر المصفوفة أو المجموعة (التي استُدعيت عبرها الدالة <code>any</code>) يحقق العبارة المنطقية (predicate) المُحدَّدة، وتعيد القيمة <code>false</code> بخلاف ذلك.
 +
* في حال استدعاء الدالة <code>any()‎</code> مع [[Kotlin/collections/Map|خريطة]] (map) وتمرير دالةٍ لها كمعامل (parameter)، فستُعيد القيمة <code>true</code> إن كان هناك واحدٌ على الأقل من أزواجها التي استُدعيت معها تحقق العبارة المنطقية (predicate) المُحدَّدة.
 +
* إن استُدعيت مع [[Kotlin/collections/Map|خريطة]] دون تمرير أيّ معاملٍ (parameter) إليها، فستعيد القيمة<code>true</code> إن كانت الخريطة تحتوي على زوج واحدٍ على الأقل، وتعيد القيمة <code>false</code> بخلاف ذلك.
 +
== البنية العامة ==
 +
استدعاء الدالة <code>any()‎</code>عبر مصفوفة بدون معامل (parameter) وبحسب نوعها:<syntaxhighlight lang="kotlin">
 +
fun <T> Array<out T>.any(): Boolean
 +
fun ByteArray.any(): Boolean )
 +
fun ShortArray.any(): Boolean
 +
fun IntArray.any(): Boolean
 +
fun LongArray.any(): Boolean
 +
fun FloatArray.any(): Boolean
 +
fun DoubleArray.any(): Boolean
 +
fun BooleanArray.any(): Boolean
 +
fun CharArray.any(): Boolean
 +
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر مصفوفة بتمرير دالةٍ منطقيةٍ (predicate) كمعامل (parameter) وبحسب نوعها:<syntaxhighlight lang="kotlin">
 +
inline fun <T> Array<out T>.any(predicate: (T) -> Boolean): Boolean
 +
inline fun ByteArray.any(predicate: (Byte) -> Boolean): Boolean
 +
inline fun ShortArray.any(predicate: (Short) -> Boolean): Boolean
 +
inline fun IntArray.any(predicate: (Int) -> Boolean): Boolean
 +
inline fun LongArray.any(predicate: (Long) -> Boolean): Boolean
 +
inline fun FloatArray.any(predicate: (Float) -> Boolean): Boolean
 +
inline fun DoubleArray.any(predicate: (Double) -> Boolean): Boolean
 +
inline fun BooleanArray.any(predicate: (Boolean) -> Boolean): Boolean
 +
inline fun CharArray.any(predicate: (Char) -> Boolean): Boolean
 +
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر عنصرٍ قابلٍ للتكرار (iterable) بتمرير دالة كمعامل:<syntaxhighlight lang="kotlin">
 +
inline fun <T> Iterable<T>.any(predicate: (T) -> Boolean): Boolean
 +
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر عنصرٍ قابلٍ للتكرار (iterable) دون معامل (parameter):<syntaxhighlight lang="kotlin">
 +
fun <T> Iterable<T>.any(): Boolean
 +
 
 +
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر [[Kotlin/collections/Map|خريطة]] بتمرير دالةٍ منطقيةٍ (predicate) كمعامل (parameter):<syntaxhighlight lang="kotlin">
 +
inline fun <K, V> Map<out K, V>.any(predicate: (Entry<K, V>) -> Boolean): Boolean
 +
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر [[Kotlin/collections/Map|خريطة]] دون معامل (parameter):<syntaxhighlight lang="kotlin">
 +
fun <K, V> Map<out K, V>.any(): Boolean
  
== البنية العامة ==
 
يمكن استدعاء الدالة <code>any()‎</code> من مصفوفات الأنواع المختلفة كما يلي:<syntaxhighlight lang="kotlin">
 
val <T> Array<out T>.lastIndex: IntRange
 
val ByteArray.lastIndex: IntRange
 
val ShortArray.lastIndex: IntRange
 
val IntArray.lastIndex: IntRange
 
val LongArray.lastIndex: IntRange
 
val FloatArray.lastIndex: IntRange
 
val DoubleArray.lastIndex: IntRange
 
val BooleanArray.lastIndex: IntRange
 
val CharArray.lastIndex: IntRange
 
</syntaxhighlight>وكذلك من المكرّرات (Iterable):<syntaxhighlight lang="kotlin">
 
val <T> List<T>.lastIndex: Int
 
</syntaxhighlight>وكذلك على القوميس (Maps):<syntaxhighlight lang="kotlin">
 
inline fun <K, V> Map<out K, V>.all( predicate: (Entry<K, V>) -> Boolean): Boolean
 
 
</syntaxhighlight>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع [[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
 
</syntaxhighlight>يُلاحَظ وجود الكلمة المفتاحية <code>inline</code> للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع [[Kotlin/inline functions|توثيق الدوال المباشرة (inline functions)]].
 +
 +
== المعاملات ==
 +
 +
=== <code>predicate</code> ===
 +
دالة تطبق على كل عنصر من عناصر المصفوفة أو الكائن <code>iterable</code> المعطى أو على كل زوج من أزواج الخريطة المعطاة، وتعيد القيمة المنطقية المقابلة لذلك العنصر أو الزوج.
  
 
== القيم المعادة ==
 
== القيم المعادة ==
<code>true</code> إن كانت كل عناصر المصفوفة أو المُكرّر (Iterable) الذي استُدعيت عبره تحقق العبارة المنطقية (predicate) المحددة، أو <code>false</code> خلاف ذلك.
+
القيمة المنطقية <code>true</code> أو <code>false</code> (انظر شرح الدالة أعلاه لمزيد من التفاصيل).
  
 
== أمثلة ==
 
== أمثلة ==
  
=== استخدام الدالة <code>()any</code> على المجالات ===
+
=== استخدام الدالة <code>()any</code> مع قائمة (List) دون تمرير معامل (Parameter) ===
تعرف الشيفرة الآتية دالة <code>isEven()</code> تعيد القيمة <code>true</code> إن كان معاملها زوجيا أو تعيد <code>false</code> خلاف ذلك، وأيضًا تعرّف مجالا (range) باسم  <code>zeroToTen</code> يبدأ من واحد وينتهي ب 10، ثم تستخدم الدالة <code>any()‎</code> للتحقق من أنّ كانت كل عناصر المجال <code>zeroToTen</code>  زوجية، ثم تعرف <code>evens</code> والذي هو حاصل ضرب عناصر المجال في <code>2</code> باستخدام الدالة <code>[[Kotlin/collections/map|map]]()</code> ونستخدم الدالة <code>any()‎</code> للتحقق من أنّ كل عناصر المجال <code>evens</code> زوجية:<syntaxhighlight lang="kotlin">
+
تعرِّف الشيفرة الآتية قائمةً (list) فارغةً باسم <code>emptyList</code> باستخدام الدالة <code>emptyList<Int>()</code>‎، ثم تعرِّف قائمة أخرى من 3 أعداد صحيحة باسم <code>nonEmptyList</code> وذلك باستخدام الدالة <code>listOf()‎</code>وتطبع القيمة الناتجة عن استدعاء الدالة<code>()any</code> على اللائحتين، وستنتج القيمة <code>false</code> بالقائمة الأولى لأن القائمة فارغة، والقيمة <code>true</code> بالقائمة الثانية لأنها تحتوي عنصرًا واحدًا على الأقل:<syntaxhighlight lang="kotlin">
 
fun main(args: Array<String>) {
 
fun main(args: Array<String>) {
val isEven: (Int) -> Boolean = { it % 2 == 0 }  // تعريف دالة
+
    val emptyList = emptyList<Int>()
val zeroToTen = 0..10  // تعريف مجال
+
    println(emptyList.any()) // false
println(zeroToTen.all(isEven)) // false
 
  
val evens = zeroToTen.map { it * 2 }  // ضرب عناصر المجال في 2
+
    val nonEmptyList = listOf(1, 2, 3)
println(evens.all(isEven)) // true
+
    println(nonEmptyList.any()) // true
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== استخدام الدالة <code>()any</code> على لائحة فارغة ===
+
=== ‎استخدام الدالة <code>()any</code> بتمرير دالة كمعامل لها ===
تعرف الشيفرة الآتية لائحة فارغة وتتحقق بواسطة الدالة <code>any()‎</code> من أن كل عناصرها زوجية، والنتيجة هي <code>true</code>، لأنها فارغة:<syntaxhighlight lang="kotlin">
+
تعرِّف الشيفرة الآتية دالةً باسم <code>isEven‎</code> لاختبار زوجية الأعداد (بالاعتماد على باقي القسمة على العدد 2) إذ تعيد قيمة <code>true</code> إن كان العدد زوجيًا <code>وfalse</code> إن كان فرديًا ، ثم تعرِّف مجالًا (range) باسم  <code>zeroToTen</code> يحتوي على القيم من <code>0</code> وحتى القيمة <code>10</code>، ثم تطبع قيمة ناتج استدعاء الدالة <code>()any</code> وهي <code>true</code> على ذلك المجال لوجود عنصر زوجيّ واحدٍ على الأقل، ثم تعرِّف مجالًا باسم <code>odds</code> مكونًا من أعداد فردية فقط وذلك باستخدام الدالة <code>map()‎</code> وتستدعي عبر  هذا المجال الدالة <code>()any</code> ثم تطبع القيمة الناتجة وهي <code>false</code> لأنّه لا يوجد أيّ عنصر زوجيّ في المجال، وفي النهاية تستدعي الدالة <code>()any</code> على قائمةٍ فارغة وتطبع الناتج وهو القيمة <code>false</code> لأنّ القائمة فارغة، تصبح الشيفرة بالشكل:<syntaxhighlight lang="kotlin">
 
fun main(args: Array<String>) {
 
fun main(args: Array<String>) {
val evens = zeroToTen.map { it * 2 }  // ضرب عناصر المجال في 2
+
    val isEven: (Int) -> Boolean = { it % 2 == 0 }
println(evens.all(isEven)) // true
+
    val zeroToTen = 0..10
 +
    println(zeroToTen.any(isEven)) // true
 +
 
 +
    val odds = zeroToTen.map { it * 2 + 1 }
 +
    println(odds.any { isEven(it) }) // false
 +
 
 +
    val emptyList = emptyList<Int>()
 +
    println(emptyList.any { true }) // false
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== انظر أيضًا ==
 
== انظر أيضًا ==
* <code>[[Kotlin/collections/any|any()]]</code>‎: تُعيد <code>true</code> إن كان عنصر واحد على الأقل من المصفوفة يحقق العبارة المنطقية (predicate) المحددة، أو <code>false</code> خلاف ذلك.
+
* الدالة <code>[[Kotlin/collections/all|all()]]</code>‎: تُعيد القيمة <code>true</code> إن كانت كل عناصر المجموعة (collection) التي استُدعيت عبرها تحقق العبارة المنطقية (predicate) المحددة، أو<code>false</code> بخلاف ذلك.
  
 
== مصادر ==
 
== مصادر ==
* [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/any.html الخاصيّة  any()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
+
* [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/any.html صفحة الدالة any()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
 
[[تصنيف:Kotlin]]
 
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
+
[[تصنيف:Kotlin Function]]
 +
[[تصنيف:Kotlin Collection]]

المراجعة الحالية بتاريخ 07:00، 8 سبتمبر 2018

يختلف سلوك الدالة any()‎ بحسب طريقة استدعائها، وسنناقش هذه الحالات تباعًا.

حالات استدعاء الدالة any()‎

  • في حال استدعاء الدالة any()‎ مع مصفوفة (array) أو مجموعة (collection) دون تمرير أيّ معامل (parameter) لها، فستعيد القيمة true إن كانت المصفوفة أو المجموعة تحتوي على عنصر ٍ واحدٍ على الأقل (أي أنها غير فارغة)، وتعيد القيمة false بخلاف ذلك.
  • في حال تمرير دالةٍ ما كوسيطٍ (parameter) في الدالة any()‎ فستعيد القيمة true إن كان هناك واحدٌ على الأقل من عناصر المصفوفة أو المجموعة (التي استُدعيت عبرها الدالة any) يحقق العبارة المنطقية (predicate) المُحدَّدة، وتعيد القيمة false بخلاف ذلك.
  • في حال استدعاء الدالة any()‎ مع خريطة (map) وتمرير دالةٍ لها كمعامل (parameter)، فستُعيد القيمة true إن كان هناك واحدٌ على الأقل من أزواجها التي استُدعيت معها تحقق العبارة المنطقية (predicate) المُحدَّدة.
  • إن استُدعيت مع خريطة دون تمرير أيّ معاملٍ (parameter) إليها، فستعيد القيمةtrue إن كانت الخريطة تحتوي على زوج واحدٍ على الأقل، وتعيد القيمة false بخلاف ذلك.

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

استدعاء الدالة any()‎عبر مصفوفة بدون معامل (parameter) وبحسب نوعها:

fun <T> Array<out T>.any(): Boolean 
fun ByteArray.any(): Boolean )
fun ShortArray.any(): Boolean
fun IntArray.any(): Boolean 
fun LongArray.any(): Boolean 
fun FloatArray.any(): Boolean 
fun DoubleArray.any(): Boolean
fun BooleanArray.any(): Boolean 
fun CharArray.any(): Boolean

استدعاء الدالة any()‎عبر مصفوفة بتمرير دالةٍ منطقيةٍ (predicate) كمعامل (parameter) وبحسب نوعها:

inline fun <T> Array<out T>.any(predicate: (T) -> Boolean): Boolean 
inline fun ByteArray.any(predicate: (Byte) -> Boolean): Boolean
inline fun ShortArray.any(predicate: (Short) -> Boolean): Boolean 
inline fun IntArray.any(predicate: (Int) -> Boolean): Boolean 
inline fun LongArray.any(predicate: (Long) -> Boolean): Boolean 
inline fun FloatArray.any(predicate: (Float) -> Boolean): Boolean 
inline fun DoubleArray.any(predicate: (Double) -> Boolean): Boolean 
inline fun BooleanArray.any(predicate: (Boolean) -> Boolean): Boolean 
inline fun CharArray.any(predicate: (Char) -> Boolean): Boolean

استدعاء الدالة any()‎عبر عنصرٍ قابلٍ للتكرار (iterable) بتمرير دالة كمعامل:

inline fun <T> Iterable<T>.any(predicate: (T) -> Boolean): Boolean

استدعاء الدالة any()‎عبر عنصرٍ قابلٍ للتكرار (iterable) دون معامل (parameter):

fun <T> Iterable<T>.any(): Boolean

استدعاء الدالة any()‎عبر خريطة بتمرير دالةٍ منطقيةٍ (predicate) كمعامل (parameter):

inline fun <K, V> Map<out K, V>.any(predicate: (Entry<K, V>) -> Boolean): Boolean

استدعاء الدالة any()‎عبر خريطة دون معامل (parameter):

fun <K, V> Map<out K, V>.any(): Boolean

يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions).

المعاملات

predicate

دالة تطبق على كل عنصر من عناصر المصفوفة أو الكائن iterable المعطى أو على كل زوج من أزواج الخريطة المعطاة، وتعيد القيمة المنطقية المقابلة لذلك العنصر أو الزوج.

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

القيمة المنطقية true أو false (انظر شرح الدالة أعلاه لمزيد من التفاصيل).

أمثلة

استخدام الدالة ()any مع قائمة (List) دون تمرير معامل (Parameter)

تعرِّف الشيفرة الآتية قائمةً (list) فارغةً باسم emptyList باستخدام الدالة emptyList<Int>()‎، ثم تعرِّف قائمة أخرى من 3 أعداد صحيحة باسم nonEmptyList وذلك باستخدام الدالة listOf()‎وتطبع القيمة الناتجة عن استدعاء الدالة()any على اللائحتين، وستنتج القيمة false بالقائمة الأولى لأن القائمة فارغة، والقيمة true بالقائمة الثانية لأنها تحتوي عنصرًا واحدًا على الأقل:

fun main(args: Array<String>) {
    val emptyList = emptyList<Int>()
    println(emptyList.any()) // false

    val nonEmptyList = listOf(1, 2, 3)
    println(nonEmptyList.any()) // true
}

‎استخدام الدالة ()any بتمرير دالة كمعامل لها

تعرِّف الشيفرة الآتية دالةً باسم isEven‎ لاختبار زوجية الأعداد (بالاعتماد على باقي القسمة على العدد 2) إذ تعيد قيمة true إن كان العدد زوجيًا وfalse إن كان فرديًا ، ثم تعرِّف مجالًا (range) باسم zeroToTen يحتوي على القيم من 0 وحتى القيمة 10، ثم تطبع قيمة ناتج استدعاء الدالة ()any وهي true على ذلك المجال لوجود عنصر زوجيّ واحدٍ على الأقل، ثم تعرِّف مجالًا باسم odds مكونًا من أعداد فردية فقط وذلك باستخدام الدالة map()‎ وتستدعي عبر هذا المجال الدالة ()any ثم تطبع القيمة الناتجة وهي false لأنّه لا يوجد أيّ عنصر زوجيّ في المجال، وفي النهاية تستدعي الدالة ()any على قائمةٍ فارغة وتطبع الناتج وهو القيمة false لأنّ القائمة فارغة، تصبح الشيفرة بالشكل:

fun main(args: Array<String>) {
    val isEven: (Int) -> Boolean = { it % 2 == 0 }
    val zeroToTen = 0..10
    println(zeroToTen.any(isEven)) // true

    val odds = zeroToTen.map { it * 2 + 1 }
    println(odds.any { isEven(it) }) // false

    val emptyList = emptyList<Int>()
    println(emptyList.any { true }) // false
}

انظر أيضًا

  • الدالة all()‎: تُعيد القيمة true إن كانت كل عناصر المجموعة (collection) التي استُدعيت عبرها تحقق العبارة المنطقية (predicate) المحددة، أوfalse بخلاف ذلك.

مصادر