בדיקת תנאים באמצעות 'any'
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-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); // trueהשיטה הזו שימושית במיוחד בתרחישי אימות שבהם צריך לדעת אם לפחות פריט אחד עומד בקריטריונים מסוימים. השיטה any() מפסיקה לבדוק ברגע שהיא מוצאת התאמה, ולכן היא יעילה יותר ממעבר ידני בלולאה על כל הרשימה כשצריך רק לדעת אם משהו קיים.
אתגר
קלצרו תוכנית שמנהלת מערכת אבטחה באמצעות בדיקה אם חיישן כלשהו בבניין זיהה פעילות חשודה. התוכנית שלכם צריכה:
- לקרוא קלט מסוג מחרוזת שמייצג את שם הבניין
- לקרוא כמה קלטים של מספרים שלמים שמייצגים קריאות מחיישנים מקומות שונות (הקלט יסתיים כשתקבלו
-1) - לקרוא קלט של מספר שלם שמייצג את ערך סף ההתראה
- להשתמש בשיטה
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" אם אף חיישן אינו חורג מהסף.
נסו בעצמכם
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');
// הדפיסו את תוצאת הפעלת ההתראה ואת הודעת המצב
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1מניפולציות מתקדמות ברשימות
מאפייני רשימה: ראשון ואחרוןמצב הרשימה: isEmpty ו-isNotEmpהיפוך רשימההוספה לרשימה: insertהסרת פריטים מרשימה: removeWhereחיפוש ברשימה: indexOfמיון רשימהערבוב רשימהסיכום – מארגן רשימות4מניפולציה מתקדמת של Map
מעבר על Mapבדיקה אם מפתחות וערכים קיימיםמאפייני Map: מפתחות וערכיםהוספה מותנית: putIfAbsentהסרת רשומות מ־MapMaps מקונניםסיכום – עדכון מלאי2פעולות פונקציונליות על רשימות
טרנספורמציה באמצעות 'map'סינון באמצעות 'where'שימוש ב-'.toList()'בדיקת תנאים באמצעות 'any'תנאים באמצעות 'every'איתור באמצעות 'firstWhere'סיכום – סינון נתונים5פרויקט: חישוב עגלת קניות
הגדרת הפרויקטהוספת פריטים לעגלה3קבוצות
מהי קבוצה?יצירת קבוצההוספה והסרה מקבוצותבדיקת נוכחות של איברים בקבוצההמרת רשימה לקבוצהאיחוד קבוצותחיתוך קבוצותהפרש קבוצותסיכום – רשימת אורחים ייחודית6טיפול בסיסי בשגיאות
מהן חריגות?בלוק ה-try-catchתפיסת חריגות באמצעות onבלוק ה-finallyהשלכת חריגהסיכום – חלוקה בטוחה9טיפוסי מנייה (Enums)
מה הם Enums?הגדרת Enum פשוטשימוש ב-Enums במשתניםEnums במשפטי 'switch'סיכום – רמזורתרגלו בעצמכם: קומפיילר Dart אונליין