الفرق بين المراجعتين لصفحة: «Kotlin/collections/all»
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(2 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: الدالة <code>all()</code> في Kotlin}}</noinclude> | <noinclude>{{DISPLAYTITLE: الدالة <code>all()</code> في Kotlin}}</noinclude> | ||
تتحقق الدالة <code>all()</code> إن كانت كافّة عناصر المصفوفة أو المجموعة (collection) التي استُدعيت عبرها تطابق شرطًا منطقيًّا محدَّدًا. | |||
== البنية العامة == | == البنية العامة == | ||
سطر 15: | سطر 15: | ||
</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>وكذلك لعناصر | </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) | تُعاد القيمة <code>true</code> إن كانت كافّة عناصر المصفوفة أو العناصر القابلة للتكرار (Iterable) التي استُدعيت معها تحقق العبارة المنطقية (predicate) المُحدَّدة، أو <code>false</code> بخلاف ذلك. | ||
== أمثلة == | == أمثلة == | ||
'''استخدام الدالة <code>()all</code> مع المجالات (Ranges):''' | |||
تعرِّف الشيفرة الآتية دالةً ([[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"> | تعرِّف الشيفرة الآتية دالةً ([[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"> | ||
fun main(args: Array<String>) { | fun main(args: Array<String>) { | ||
سطر 35: | سطر 40: | ||
println(evens.all(isEven)) // true | println(evens.all(isEven)) // true | ||
</syntaxhighlight> | </syntaxhighlight>'''استخدام الدالة <code>()all</code> مع مصفوفة فارغة (Empty Array):''' | ||
تعرِّف الشيفرة الآتية دالةً ([[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"> | تعرِّف الشيفرة الآتية دالةً ([[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"> | ||
fun main(args: Array<String>) { | fun main(args: Array<String>) { | ||
سطر 53: | سطر 57: | ||
[[تصنيف:Kotlin]] | [[تصنيف:Kotlin]] | ||
[[تصنيف:Kotlin Function]] | [[تصنيف: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) المُحدَّدة.