בדיקת נוכחות של איברים בקבוצה
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 20 מתוך 65.
כשעובדים עם Set, לעיתים קרובות צריך לבדוק אם רכיב מסוים קיים באוסף. המתודה contains() מספקת דרך פשוטה ויעילה לבצע את הבדיקה הזאת, ומחזירה true אם הרכיב נמצא ו-false אם לא.
אחד היתרונות המרכזיים של השימוש ב־contains() עם Set הוא הביצועים יוצאי הדופן שלו. בניגוד לחיפוש בתוך List, שבו ייתכן שיהיה צורך לבדוק כל איבר בזה אחר זה, פעולות Set מותאמות לחיפוש מהיר, ולכן contains() יעילה מאוד גם באוספים גדולים.
Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};
// בדקו אם מרכיבים מסוימים זמינים
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');
print(hasFlour); // true
print(hasMilk); // falseהשיטה הזאת שימושית במיוחד כשצריך לאמת נתונים, לבדוק תנאים מקדימים או לסנן מידע על סמך השתייכות לאוסף מסוים. התוצאה הבוליאנית מתאימה במיוחד לשימוש במשפטי תנאי ובפעולות לוגיות.
אתגר
קלצרו תוכנית שמנהלת מערכת לאימות מתכונים באמצעות בדיקה אם מרכיבים מסוימים זמינים במזווה המטבח. התוכנית שלכם צריכה:
- לקרוא קלט מסוג מחרוזת שמייצג את שם המתכון
- לקרוא כמה קלטים מסוג מחרוזת שמייצגים את המרכיבים הזמינים במזווה (הקלט יסתיים כשתקבלו
"pantry_done") - לקרוא כמה קלטים מסוג מחרוזת שמייצגים את מרכיבי המתכון הנדרשים (הקלט יסתיים כשתקבלו
"recipe_done") - ליצור Set עם המרכיבים הזמינים במזווה
- להשתמש בשיטה
contains()כדי לבדוק אם כל אחד מהמרכיבים הנדרשים זמין במזווה - להדפיס את תוצאות אימות המתכון בדיוק בפורמט שמוצג למטה
לדוגמה, אם שם המתכון הוא "Chocolate Chip Cookies", המרכיבים במזווה הם "flour", "sugar", "eggs", "butter", "vanilla", והמרכיבים הנדרשים הם "flour", "sugar", "chocolate chips", "butter", התוכנית שלכם צריכה להציג:
Recipe: Chocolate Chip Cookies
Pantry ingredients: {flour, sugar, eggs, butter, vanilla}
Required ingredients: [flour, sugar, chocolate chips, butter]
Checking ingredient availability:
- flour: Available
- sugar: Available
- chocolate chips: Missing
- butter: Available
Missing ingredients: [chocolate chips]
Status: Cannot make recipe - missing 1 ingredient(s)אם שם המתכון הוא "Scrambled Eggs", המרכיבים במזווה הם "eggs", "butter", "salt", "pepper", והמרכיבים הנדרשים הם "eggs", "butter", "salt", התוכנית שלכם צריכה להציג:
Recipe: Scrambled Eggs
Pantry ingredients: {eggs, butter, salt, pepper}
Required ingredients: [eggs, butter, salt]
Checking ingredient availability:
- eggs: Available
- butter: Available
- salt: Available
Missing ingredients: []
Status: Ready to cook - all ingredients availableאם שם המתכון הוא "Fruit Salad", המרכיבים במזווה הם "apples", "bananas", והמרכיבים הנדרשים הם "apples", "oranges", "grapes", "honey", התוכנית שלכם צריכה להציג:
Recipe: Fruit Salad
Pantry ingredients: {apples, bananas}
Required ingredients: [apples, oranges, grapes, honey]
Checking ingredient availability:
- apples: Available
- oranges: Missing
- grapes: Missing
- honey: Missing
Missing ingredients: [oranges, grapes, honey]
Status: Cannot make recipe - missing 3 ingredient(s)על התוכנית שלכם להשתמש בשיטה contains() כדי לבדוק כל מרכיב נדרש מול ה-Set של המזווה. אחסנו את המרכיבים הנדרשים ברשימה כדי לשמור על סדר הבדיקה, ואספו את כל המרכיבים החסרים ברשימה נפרדת. אם כל המרכיבים זמינים, הציגו את "Ready to cook - all ingredients available" כסטטוס. אם חסרים מרכיבים כלשהם, הציגו את "Cannot make recipe - missing X ingredient(s)", כאשר X הוא מספר המרכיבים החסרים.
נסו בעצמכם
import 'dart:io';
void main() {
// קראו את שם המתכון
String? recipeName = stdin.readLineSync();
// קראו את המצרכים במזווה עד "pantry_done"
Set<String> pantryIngredients = <String>{};
String? pantryInput;
while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
if (pantryInput != null) {
pantryIngredients.add(pantryInput);
}
}
// קראו את המצרכים הנדרשים עד "recipe_done"
List<String> requiredIngredients = <String>[];
String? recipeInput;
while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
if (recipeInput != null) {
requiredIngredients.add(recipeInput);
}
}
// TODO: כתבו את הקוד שלכם להלן
// השתמשו ב-pantryIngredients.contains() כדי לבדוק כל מצרך נדרש
// צרו רשימה לאחסון המצרכים החסרים
// בדקו את הזמינות והדפיסו את התוצאות בפורמט הנדרש
// הדפיסו את התוצאות (החליפו במימוש שלכם)
print("Recipe: $recipeName");
print("Pantry ingredients: $pantryIngredients");
print("Required ingredients: $requiredIngredients");
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
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 אונליין