الفرق بين المراجعتين لصفحة: «Kotlin/collections/any»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(3 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: الدالة <code>any()</code> في | <noinclude>{{DISPLAYTITLE: الدالة <code>any()</code> في Kotlin}}</noinclude> | ||
يختلف سلوك الدالة <code>any()</code> بحسب طريقة | يختلف سلوك الدالة <code>any()</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 <T> Array<out T>.any(): Boolean | ||
fun ByteArray.any(): Boolean ) | fun ByteArray.any(): Boolean ) | ||
سطر 17: | سطر 18: | ||
fun BooleanArray.any(): Boolean | fun BooleanArray.any(): Boolean | ||
fun CharArray.any(): Boolean | fun CharArray.any(): Boolean | ||
</syntaxhighlight> | </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: | سطر 28: | ||
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> | </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> | </syntaxhighlight>استدعاء الدالة <code>any()</code>عبر عنصرٍ قابلٍ للتكرار (iterable) دون معامل (parameter):<syntaxhighlight lang="kotlin"> | ||
fun <T> Iterable<T>.any(): Boolean | fun <T> Iterable<T>.any(): Boolean | ||
</syntaxhighlight> | </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 | inline fun <K, V> Map<out K, V>.any(predicate: (Entry<K, V>) -> Boolean): Boolean | ||
</syntaxhighlight> | </syntaxhighlight>استدعاء الدالة <code>any()</code>عبر [[Kotlin/collections/Map|خريطة]] دون معامل (parameter):<syntaxhighlight lang="kotlin"> | ||
fun <K, V> Map<out K, V>.any(): Boolean | fun <K, V> Map<out K, V>.any(): 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> أو <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>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>() | ||
println(emptyList.any()) // false | println(emptyList.any()) // false | ||
val nonEmptyList = listOf(1, 2, 3) | val nonEmptyList = listOf(1, 2, 3) | ||
println(nonEmptyList.any()) // true | println(nonEmptyList.any()) // true | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== استخدام الدالة <code>()any</code> بتمرير دالة | === استخدام الدالة <code>()any</code> بتمرير دالة كمعامل لها === | ||
تعرِّف الشيفرة الآتية دالةً باسم <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 } | ||
val zeroToTen = 0..10 | val zeroToTen = 0..10 | ||
println(zeroToTen.any(isEven)) // true | println(zeroToTen.any(isEven)) // true | ||
val odds = zeroToTen.map { it * 2 + 1 } | val odds = zeroToTen.map { it * 2 + 1 } | ||
println(odds.any { isEven(it) }) // false | println(odds.any { isEven(it) }) // false | ||
val emptyList = emptyList<Int>() | val emptyList = emptyList<Int>() | ||
println(emptyList.any { true }) // false | println(emptyList.any { true }) // false | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* <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 | * [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/any.html صفحة الدالة any() في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.] | ||
[[تصنيف:Kotlin]] | [[تصنيف:Kotlin]] | ||
[[تصنيف:Kotlin | [[تصنيف: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
بخلاف ذلك.