التحقق من الشروط باستخدام 'any'
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 13 من 65.
أحياناً تحتاج إلى التحقق مما إذا كان عنصر واحد على الأقل في قائمة ما يستوفي شرطاً معيناً، دون الحاجة إلى فحص كل عنصر على حدة. توفر الطريقة any() وسيلة فعالة للقيام بذلك من خلال إرجاع true بمجرد العثور على أول عنصر يستوفي شرط الاختبار الخاص بك.
تأخذ الطريقة any() دالة اختبار تُرجع true أو false لكل عنصر. إذا اجتاز أي عنصر الاختبار، فإن any() تُرجع true فوراً. وإذا لم يجتز أي عنصر الاختبار بعد فحص القائمة بأكملها، فإنها تُرجع false.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// التحقق مما إذا كان أي عنصر يكلف أكثر من 100 دولار
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // صحيحهذه الطريقة مفيدة بشكل خاص لسيناريوهات التحقق حيث تحتاج إلى معرفة ما إذا كان عنصر واحد على الأقل يستوفي معايير معينة. تتوقف الطريقة any() عن التحقق بمجرد العثور على تطابق، مما يجعلها أكثر كفاءة من التكرار يدويًا عبر القائمة بأكملها عندما تحتاج فقط إلى معرفة ما إذا كان هناك شيء موجود.
التحدي
سهلقم بإنشاء برنامج يدير نظاماً أمنياً من خلال التحقق مما إذا كان أي مستشعر في المبنى قد اكتشف نشاطاً مشبوهاً. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (string) يمثل اسم المبنى
- قراءة مدخلات صحيحة (integer) متعددة تمثل قراءات المستشعرات من طوابق مختلفة (ينتهي الإدخال عند استلام القيمة
-1) - قراءة مدخل صحيح (integer) يمثل قيمة عتبة التنبيه (alert threshold)
- استخدام التابع
any()للتحقق مما إذا كانت أي قراءة للمستشعر أكبر من أو تساوي عتبة التنبيه - طباعة نتائج المراقبة الأمنية بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان اسم المبنى "Office Tower"، وقراءات المستشعرات هي 15، 23، 8، 45، 12، وعتبة التنبيه هي 40، فيجب أن يخرج برنامجك ما يلي:
Building: Office Tower
Sensor readings: [15, 23, 8, 45, 12]
Alert threshold: 40
Checking for readings >= 40
Alert triggered: true
Status: Security breach detected - immediate response requiredإذا كان اسم المبنى "Shopping Mall"، وقراءات المستشعرات هي 18، 25، 12، 30، وعتبة التنبيه هي 50، فيجب أن يخرج برنامجك ما يلي:
Building: Shopping Mall
Sensor readings: [18, 25, 12, 30]
Alert threshold: 50
Checking for readings >= 50
Alert triggered: false
Status: All systems normal - no threats detectedإذا كان اسم المبنى "Warehouse"، وقراءات المستشعرات هي 75، 82، وعتبة التنبيه هي 70، فيجب أن يخرج برنامجك ما يلي:
Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response requiredيجب أن يستخدم برنامجك التابع any() للتحقق مما إذا كانت أي قراءة للمستشعر أكبر من أو تساوي عتبة التنبيه. اعرض "Security breach detected - immediate response required" إذا قام أي مستشعر بتفعيل التنبيه، أو "All systems normal - no threats detected" إذا لم تتجاوز أي مستشعرات العتبة.
ورقة مرجعية
تتحقق طريقة any() مما إذا كان عنصر واحد على الأقل في القائمة يستوفي شرطًا محددًا. وهي تعيد القيمة true بمجرد العثور على العنصر الأول الذي يستوفي شرط الاختبار، أو false إذا لم تجتز أي عناصر الاختبار.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// التحقق مما إذا كان أي عنصر يكلف أكثر من 100 دولار
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueتُعد طريقة any() فعالة لأنها تتوقف عن التحقق بمجرد العثور على تطابق، مما يجعلها مثالية لسيناريوهات التحقق من الصحة حيث تحتاج فقط إلى معرفة ما إذا كان هناك شيء موجود أم لا.
جرّب بنفسك
import 'dart:io';
void main() {
// قراءة اسم المبنى
String? buildingName = stdin.readLineSync();
// قراءة قراءات المستشعر حتى يتم مواجهة -1
List<int> sensorReadings = [];
while (true) {
int reading = int.parse(stdin.readLineSync()!);
if (reading == -1) {
break;
}
sensorReadings.add(reading);
}
// قراءة حد التنبيه
int alertThreshold = int.parse(stdin.readLineSync()!);
// TODO: اكتب الكود الخاص بك أدناه
// استخدم الطريقة any() للتحقق مما إذا كانت أي قراءة للمستشعر >= حد التنبيه
// طباعة النتائج بالتنسيق المطلوب
print('Building: $buildingName');
print('Sensor readings: $sensorReadings');
print('Alert threshold: $alertThreshold');
print('Checking for readings >= $alertThreshold');
// طباعة نتيجة تفعيل التنبيه ورسالة الحالة
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التعامل المتقدم مع القوائم
خصائص القائمة: first و lastحالة القائمة: isEmpty و isNotEmptyعكس القائمةالإضافة إلى القائمة: insertالحذف من القائمة: removeWhereالبحث في القائمة: indexOfفرز القائمةخلط القائمةملخص - منظم القوائم4معالجة الـ Map المتقدمة
التكرار عبر الـ Mapالتحقق من المفاتيح والقيمخصائص الـ Map: keys و valuesإضافة مشروطة: putIfAbsentإزالة العناصر من الـ Mapالـ Maps المتداخلةمراجعة - تحديث المخزون2عمليات القوائم الوظيفية
التحويل باستخدام 'map'التصفية باستخدام 'where'استخدام '.toList()'التحقق من الشروط باستخدام 'any'الشروط باستخدام 'every'البحث باستخدام 'firstWhere'مراجعة - تصفية البيانات5مشروع: حاسبة عربة التسوق
إعداد المشروعإضافة العناصر إلى العربة3المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة