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

من موسوعة حسوب
لا ملخص تعديل
طلا ملخص تعديل
 
(5 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الدالة all()‎ في لغة Kotlin}}</noinclude>
<noinclude>{{DISPLAYTITLE: الدالة <code>‎‎all()‎</code> في Kotlin}}</noinclude>
 
تتحقق الدالة <code>all()‎</code> إن كانت كافّة عناصر المصفوفة أو المجموعة (collection) التي استُدعيت عبرها تطابق شرطًا منطقيًّا محدَّدًا.
تُعيد الدالة <code>all()‎</code> القيمة <code>true</code> إن كانت كل عناصر المجموعة (collection) التي استُدعيت عبرها تحقق العبارة المنطقية (predicate) المحددة، أو <code>false</code> خلاف ذلك.


== البنية العامة ==
== البنية العامة ==
يمكن استدعاء الدالة <code>all()‎</code> من مصفوفات الأنواع المختلفة كما يلي:<syntaxhighlight lang="kotlin">
يمكن استدعاء الدالة <code>all()‎</code> للمصفوفات من الأنواع المختلفة كما يلي:<syntaxhighlight lang="kotlin">
inline fun <T> Array<out T>.all(predicate: (T) -> Boolean): Boolean  
inline fun <T> Array<out T>.all(predicate: (T) -> Boolean): Boolean  
inline fun ByteArray.all(predicate: (Byte) -> Boolean): Boolean  
inline fun ByteArray.all(predicate: (Byte) -> Boolean): Boolean  
سطر 14: سطر 13:
inline fun BooleanArray.all(predicate: (Boolean) -> Boolean): Boolean
inline fun BooleanArray.all(predicate: (Boolean) -> Boolean): Boolean
inline fun CharArray.all(predicate: (Char) -> Boolean): Boolean  
inline fun CharArray.all(predicate: (Char) -> Boolean): Boolean  
</syntaxhighlight>وكذلك من المكرّرات (Iterables):<syntaxhighlight lang="kotlin">
</syntaxhighlight>وكذلك للعناصر القابلة للتكرار (Iterables):<syntaxhighlight lang="kotlin">
inline fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean
inline fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean
</syntaxhighlight>وكذلك على القواميس (Maps):<syntaxhighlight lang="kotlin">
</syntaxhighlight>وكذلك لعناصر [[Kotlin/collections/Map|الخرائط]] (maps):<syntaxhighlight lang="kotlin">
inline fun <K, V> Map<out K, V>.all( predicate: (Entry<K, V>) -> Boolean): Boolean
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> إن كانت كافّة عناصر المصفوفة أو العناصر القابلة للتكرار (Iterable) التي استُدعيت معها تحقق العبارة المنطقية (predicate) المُحدَّدة، أو <code>false</code> بخلاف ذلك.


== أمثلة ==
== أمثلة ==
'''استخدام الدالة <code>()all</code> مع المجالات (Ranges):'''


=== استخدام الدالة <code>()all</code> على المجالات ===
تعرِّف الشيفرة الآتية دالةً ([[Kotlin/lambdas|بصيغة lambda]]) باسم <code>isEven()‎</code> ، تعيد هذه الدالة القيمة <code>true</code> إن كان معاملها (والمتمثل [[Kotlin/lambdas#it: .D8.A7.D9.84.D8.A7.D8.B3.D9.85 .D8.A7.D9.84.D8.B6.D9.85.D9.86.D9.8A .28implicit name.29 .D9.84.D9.84.D9.85.D8.AA.D8.AD.D9.88.D9.84 .D8.A7.D9.84.D9.88.D8.AD.D9.8A.D8.AF|بالاسم الضمني it]]) زوجيًا أو القيمة<code>false</code> إن كان فرديًا (يكون باقي القسمة على 2 مساويًا للصفر في العدد الزوجي)، كما وتعرِّف الشيفرة مجالًا (range) باسم  <code>zeroToTen</code> يبدأ بالقيمة <code>1</code> وينتهي بالقيمة <code>10</code>، ثم تُستخدَم الدالة <code>all()‎</code> للتحقق من أنّ كل عناصر المجال <code>zeroToTen</code> زوجيّة إذ إنّ الدالة <code>isEven</code> هي العبارة المنطقية (predicate) التي يجب أن تحققها جميع عناصر المجال، وستكون النتيجة <code>false</code> لوجود أعداد فردية في ذلك المجال:<syntaxhighlight lang="kotlin">
تعرف الشيفرة الآتية دالة <code>isEven()‎</code> تعيد القيمة <code>true</code> إن كان معاملها زوجيا أو تعيد <code>false</code> خلاف ذلك، وأيضًا تعرّف مجالا (range) باسم  <code>zeroToTen</code> يبدأ من واحد وينتهي ب 10، ثم تستخدم الدالة <code>all()‎</code> للتحقق من أنّ كانت كل عناصر المجال <code>zeroToTen</code> زوجية، ثم تعرف <code>evens</code> والذي هو حاصل ضرب عناصر المجال في <code>2</code> باستخدام الدالة <code>[[Kotlin/collections/map|map]]()‎</code> ونستخدم الدالة <code>all()‎</code> للتحقق من أنّ كل عناصر المجال <code>evens</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.all(isEven)) // false
    println(zeroToTen.all(isEven)) // false
}
</syntaxhighlight>وللحصول على القيمة المنطقية <code>true</code> سنلجأ لضرب كل عناصر المجال بالعدد 2 وذلك بالاعتماد على map وتخزين القيم الناتجة في المتغيّر <code>evens</code> كما في الشيفرة:<syntaxhighlight lang="kotlin">
    val evens = zeroToTen.map { it * 2 } // ضرب عناصر المجال بالعدد 2
    println(evens.all(isEven)) // true


val evens = zeroToTen.map { it * 2 }  // ضرب عناصر المجال في 2
</syntaxhighlight>'''استخدام الدالة <code>()all</code> مع مصفوفة فارغة (Empty Array):'''
println(evens.all(isEven)) // true
}
</syntaxhighlight>


=== استخدام الدالة <code>()all</code> على لائحة فارغة ===
تعرِّف الشيفرة الآتية دالةً ([[Kotlin/lambdas|بصيغة lambda]]) باسم <code>isEven()‎</code> ، تعيد هذه الدالة القيمة <code>true</code> إن كان معاملها (والمتمثل [[Kotlin/lambdas#it: .D8.A7.D9.84.D8.A7.D8.B3.D9.85 .D8.A7.D9.84.D8.B6.D9.85.D9.86.D9.8A .28implicit name.29 .D9.84.D9.84.D9.85.D8.AA.D8.AD.D9.88.D9.84 .D8.A7.D9.84.D9.88.D8.AD.D9.8A.D8.AF|بالاسم الضمني it]]) زوجيًا أو القيمة<code>false</code> إن كان فرديًا (يكون باقي القسمة على 2 مساويًا للصفر في العدد الزوجي)، كما وتعرِّف مصفوفةً فارغةً وتتحقق بواسطة الدالة <code>all()‎</code> من أن كافّة عناصرها زوجية، وستكون النتيجة <code>true</code> لأنها فارغة:<syntaxhighlight lang="kotlin">
تعرف الشيفرة الآتية لائحة فارغة وتتحقق بواسطة الدالة <code>all()‎</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 evens = zeroToTen.map { it * 2 }  // ضرب عناصر المجال في 2
    val evens = emptyArray<Int>()
println(evens.all(isEven)) // true
    println(evens.all(isEven)) // true
}
}
</syntaxhighlight>
</syntaxhighlight>


== انظر أيضًا ==
== انظر أيضًا ==
* <code>[[Kotlin/collections/any|any()]]</code>‎: تُعيد <code>true</code> إن كان عنصر واحد على الأقل من المصفوفة يحقق العبارة المنطقية (predicate) المحددة، أو <code>false</code> خلاف ذلك.
* الدالة <code>[[Kotlin/collections/any|any()]]</code>‎: للتأكد من أن عنصرًا واحدًا على الأقل من المصفوفة يحقّق العبارة المنطقية (predicate) المُحدَّدة.


== مصادر ==
== مصادر ==
* [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/all.html الخاصيّة  any()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
* [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/all.html صفحة الدالة all()‎ في التوثيق الرسميّ للمكتبة القياسيّة في لغة Kotlin.]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin]]
[[تصنيف:Kotlin Functions]]
[[تصنيف:Kotlin Function]]
[[تصنيف:Kotlin Collection]]

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

تتحقق الدالة all()‎ إن كانت كافّة عناصر المصفوفة أو المجموعة (collection) التي استُدعيت عبرها تطابق شرطًا منطقيًّا محدَّدًا.

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

يمكن استدعاء الدالة all()‎ للمصفوفات من الأنواع المختلفة كما يلي:

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

وكذلك للعناصر القابلة للتكرار (Iterables):

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

وكذلك لعناصر الخرائط (maps):

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

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

المعاملات

predicate

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

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

تُعاد القيمة true إن كانت كافّة عناصر المصفوفة أو العناصر القابلة للتكرار (Iterable) التي استُدعيت معها تحقق العبارة المنطقية (predicate) المُحدَّدة، أو false بخلاف ذلك.

أمثلة

استخدام الدالة ()all مع المجالات (Ranges):

تعرِّف الشيفرة الآتية دالةً (بصيغة lambda) باسم isEven()‎ ، تعيد هذه الدالة القيمة true إن كان معاملها (والمتمثل بالاسم الضمني it) زوجيًا أو القيمةfalse إن كان فرديًا (يكون باقي القسمة على 2 مساويًا للصفر في العدد الزوجي)، كما وتعرِّف الشيفرة مجالًا (range) باسم  zeroToTen يبدأ بالقيمة 1 وينتهي بالقيمة 10، ثم تُستخدَم الدالة all()‎ للتحقق من أنّ كل عناصر المجال zeroToTen زوجيّة إذ إنّ الدالة isEven هي العبارة المنطقية (predicate) التي يجب أن تحققها جميع عناصر المجال، وستكون النتيجة false لوجود أعداد فردية في ذلك المجال:

fun main(args: Array<String>) {
    val isEven: (Int) -> Boolean = { it % 2 == 0 } // تعريف دالة
    val zeroToTen = 0..10 // تعريف مجال
    println(zeroToTen.all(isEven)) // false
}

وللحصول على القيمة المنطقية true سنلجأ لضرب كل عناصر المجال بالعدد 2 وذلك بالاعتماد على map وتخزين القيم الناتجة في المتغيّر evens كما في الشيفرة:

    val evens = zeroToTen.map { it * 2 } // ضرب عناصر المجال بالعدد 2
    println(evens.all(isEven)) // true

استخدام الدالة ()all مع مصفوفة فارغة (Empty Array): تعرِّف الشيفرة الآتية دالةً (بصيغة lambda) باسم isEven()‎ ، تعيد هذه الدالة القيمة true إن كان معاملها (والمتمثل بالاسم الضمني it) زوجيًا أو القيمةfalse إن كان فرديًا (يكون باقي القسمة على 2 مساويًا للصفر في العدد الزوجي)، كما وتعرِّف مصفوفةً فارغةً وتتحقق بواسطة الدالة all()‎ من أن كافّة عناصرها زوجية، وستكون النتيجة true لأنها فارغة:

fun main(args: Array<String>) { 
    val isEven: (Int) -> Boolean = { it % 2 == 0 } // تعريف دالة
    val evens = emptyArray<Int>()
    println(evens.all(isEven)) // true
}

انظر أيضًا

  • الدالة any()‎: للتأكد من أن عنصرًا واحدًا على الأقل من المصفوفة يحقّق العبارة المنطقية (predicate) المُحدَّدة.

مصادر