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

من موسوعة حسوب
لا ملخص تعديل
مراجعة
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة <code>any()‎</code> في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>any()‎</code> في لغة Kotlin}}</noinclude>
يختلف سلوك الدالة <code>any()‎</code> بحسب طريقة استدعائها:
يختلف سلوك الدالة <code>any()‎</code> بحسب طريقة استدعائها:
* في حال استدعاء الدالة <code>any()‎</code> عبر مصفوفة أو مجموعة (collection) دون تمرير أيّ معامل (parameter) لها فستعيد القيمة<code>true</code> إن كانت المصفوفة أو المجموعة تحتوي على عنصر واحد على الأقل، أو <code>false</code> خلاف ذلك.
* في حال استدعاء الدالة <code>any()‎</code> عبر مصفوفة (array) أو مجموعة (collection) دون تمرير أيّ معامل (parameter) لها فستعيد القيمة<code>true</code> إن كانت المصفوفة أو المجموعة تحتوي على عنصر ٍ واحدٍ على الأقل (أي أنها غير فارغة)، وتعيد القيمة <code>false</code> بخلاف ذلك.
* في حال تمرير دالة كوسيط إلى المصفوفة أو المجموعة التي استُدعيت الدالة <code>any()‎</code> عبرها فستعيد القيمة <code>true</code> إن كان واحد على الأقل من عناصر المصفوفة أو المجموعةيحقق العبارة المنطقية (predicate) المحددة، أو <code>false</code> خلاف ذلك
* في حال تمرير دالةٍ ما كوسيطٍ (parameter) في الدالة <code>any()‎</code> فستعيد القيمة <code>true</code> إن كان هناك واحدٌ على الأقل من عناصر المصفوفة أو المجموعة (التي استُدعيت عبرها الدالة <code>any</code>) يحقق العبارة المنطقية (predicate) المُحدَّدة، وتعيد القيمة <code>false</code> بخلاف ذلك.
* في حال استدعاء الدالة <code>any()‎</code> عبر قاموس (Map) وتمرير دالة لها كمعامل، فستُعيد القيمة <code>true</code> إن كان واحد على الأقل من مداخل (entries) القاموس الذي استُدعيت عبره يحقق العبارة المنطقية (predicate) المحددة:
* في حال استدعاء الدالة <code>any()‎</code> عبر عنصر map وتمرير دالةٍ لها كمعامل (parameter)، فستُعيد القيمة <code>true</code> إن كان هناك واحدٌ على الأقل من مداخل (entries) عنصر map الذي استُدعيت عبره يحقق العبارة المنطقية (predicate) المُحدَّدة.
* إن استُدعيت عبر قاموس دون تمرير أي معامل (parameter) إليها، فستعيدالقيمة<code>true</code> إن كان القاموس يحتوي على مدخل (entry) واحد على الأقل، أو <code>false</code> خلاف ذلك.
* إن استُدعيت عبر عنصر map دون تمرير أيّ معاملٍ (parameter) إليها، فستعيد القيمة<code>true</code> إن كان عنصر map يحتوي على مدخلٍ (entry) واحدٍ على الأقل، وتعيد القيمة <code>false</code> بخلاف ذلك.


== البنية العامة ==
== البنية العامة ==
يمكن استدعاء الدالة <code>any()‎</code>عبر مصفوفة دون معامل:<syntaxhighlight lang="kotlin">
استدعاء الدالة <code>any()‎</code>عبر مصفوفة بدون معامل (parameter) وبحسب نوعها:<syntaxhighlight lang="kotlin">
fun <T> Array<out T>.any(): Boolean  
fun <T> Array<out T>.any(): Boolean  
fun ByteArray.any(): Boolean )
fun ByteArray.any(): Boolean )
سطر 17: سطر 17:
fun BooleanArray.any(): Boolean  
fun BooleanArray.any(): Boolean  
fun CharArray.any(): Boolean  
fun CharArray.any(): Boolean  
</syntaxhighlight>يمكن استدعاء الدالة <code>any()‎</code>عبر مصفوفة بتمرير دالة كمعامل:<syntaxhighlight lang="kotlin">
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر مصفوفة بتمرير دالةٍ منطقيةٍ (predicate) كمعامل (parameter) وبحسب نوعها:<syntaxhighlight lang="kotlin">
inline fun <T> Array<out T>.any(predicate: (T) -> Boolean): Boolean  
inline fun <T> Array<out T>.any(predicate: (T) -> Boolean): Boolean  
inline fun ByteArray.any(predicate: (Byte) -> Boolean): Boolean
inline fun ByteArray.any(predicate: (Byte) -> Boolean): Boolean
سطر 27: سطر 27:
inline fun BooleanArray.any(predicate: (Boolean) -> Boolean): Boolean  
inline fun BooleanArray.any(predicate: (Boolean) -> Boolean): Boolean  
inline fun CharArray.any(predicate: (Char) -> Boolean): Boolean
inline fun CharArray.any(predicate: (Char) -> Boolean): Boolean
</syntaxhighlight>يمكن استدعاء الدالة <code>any()‎</code>عبر مُكرر (iterable) بتمرير دالة كمعامل:<syntaxhighlight lang="kotlin">
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر عنصرٍ قابلٍ للتكرار (iterable) بتمرير دالة كمعامل:<syntaxhighlight lang="kotlin">
inline fun <T> Iterable<T>.any(predicate: (T) -> Boolean): Boolean
inline fun <T> Iterable<T>.any(predicate: (T) -> Boolean): Boolean
</syntaxhighlight>يمكن استدعاء الدالة <code>any()‎</code>عبر مُكرر (iterable) دون معامل:<syntaxhighlight lang="kotlin">
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر عنصرٍ قابلٍ للتكرار (iterable) دون معامل (parameter):<syntaxhighlight lang="kotlin">
fun <T> Iterable<T>.any(): Boolean
fun <T> Iterable<T>.any(): Boolean


</syntaxhighlight>يمكن استدعاء الدالة <code>any()‎</code>عبر قاموس (Map) بتمرير دالة كمعامل:<syntaxhighlight lang="kotlin">
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر عنصر map بتمرير دالةٍ منطقيةٍ (predicate) كمعامل (parameter):<syntaxhighlight lang="kotlin">
inline fun <K, V> Map<out K, V>.any(predicate: (Entry<K, V>) -> Boolean): Boolean
inline fun <K, V> Map<out K, V>.any(predicate: (Entry<K, V>) -> Boolean): Boolean
</syntaxhighlight>يمكن استدعاء الدالة <code>any()‎</code>عبر قاموس (Map) دون معامل:<syntaxhighlight lang="kotlin">
</syntaxhighlight>استدعاء الدالة <code>any()‎</code>عبر عنصر map دون معامل (parameter):<syntaxhighlight lang="kotlin">
fun <K, V> Map<out K, V>.any(): Boolean
fun <K, V> Map<out K, V>.any(): Boolean


سطر 40: سطر 40:


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


== أمثلة ==
== أمثلة ==


=== استخدام الدالة <code>()any</code> على اللوائح دون تمرير مُعامل ===
=== استخدام الدالة <code>()any</code> مع قائمة (List) دون تمرير معامل (Parameter) ===
تعرف الشيفرة الآتية لائحة (list) فارغة باسم <code>emptyList</code>  باستخدام الدالة <code>emptyList<Int>()</code>‎، ثم تعرف لائحة من 3 عناصر عددية باستخدام الدالة <code>listOf()‎</code>وتطبع قيمة استدعاء الدالة<code>()any</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 emptyList = emptyList<Int>()
val emptyList = emptyList<Int>()
سطر 55: سطر 55:
</syntaxhighlight>
</syntaxhighlight>


=== ‎استخدام الدالة <code>()any</code> بتمرير دالة كمُعامل ===
=== ‎استخدام الدالة <code>()any</code> بتمرير دالة كمعامل لها ===
تعرف الشيفرة الآتيةدالة باسم <code>isEvent‎</code> لاختبار زوجية الأعداد، ثم تعرّف مجالًا (range) باسم  <code>zeroToTen</code> وتطبع قيمة ناتج استدعاء الدالة <code>()any</code> على ذلك المجال، ثم تعرف مجالًا باسم <code>odds</code> مكونًا من أعداد فردية باستخدام الدالة <code>map()‎</code> وتستدعي عبره الدالة <code>()any</code> ثم تطبع الناتج، وفي الأخير تستدعي الدالة <code>()any</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 isEven: (Int) -> Boolean = { it % 2 == 0 }
val isEven: (Int) -> Boolean = { it % 2 == 0 }
سطر 71: سطر 71:


== انظر أيضًا ==
== انظر أيضًا ==
* <code>[[Kotlin/collections/all|all()]]</code>‎: تُعيد القيمة <code>true</code> إن كانت كل عناصر المجموعة (collection) التي استُدعيت عبرها تحقق العبارة المنطقية (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]]

مراجعة 15:38، 3 يونيو 2018

يختلف سلوك الدالة any()‎ بحسب طريقة استدعائها:

  • في حال استدعاء الدالة any()‎ عبر مصفوفة (array) أو مجموعة (collection) دون تمرير أيّ معامل (parameter) لها فستعيد القيمةtrue إن كانت المصفوفة أو المجموعة تحتوي على عنصر ٍ واحدٍ على الأقل (أي أنها غير فارغة)، وتعيد القيمة false بخلاف ذلك.
  • في حال تمرير دالةٍ ما كوسيطٍ (parameter) في الدالة any()‎ فستعيد القيمة true إن كان هناك واحدٌ على الأقل من عناصر المصفوفة أو المجموعة (التي استُدعيت عبرها الدالة any) يحقق العبارة المنطقية (predicate) المُحدَّدة، وتعيد القيمة false بخلاف ذلك.
  • في حال استدعاء الدالة any()‎ عبر عنصر map وتمرير دالةٍ لها كمعامل (parameter)، فستُعيد القيمة true إن كان هناك واحدٌ على الأقل من مداخل (entries) عنصر map الذي استُدعيت عبره يحقق العبارة المنطقية (predicate) المُحدَّدة.
  • إن استُدعيت عبر عنصر map دون تمرير أيّ معاملٍ (parameter) إليها، فستعيد القيمةtrue إن كان عنصر map يحتوي على مدخلٍ (entry) واحدٍ على الأقل، وتعيد القيمة 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()‎عبر عنصر map بتمرير دالةٍ منطقيةٍ (predicate) كمعامل (parameter):

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

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

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

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

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

القيمة المنطقية 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 بخلاف ذلك.

مصادر