חזרה: מעבד רשימות
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 50 מתוך 65.
אתגר
קלצרו מערכת גמישה לעיבוד נתונים המדגימה פונקציות מסדר גבוה באמצעות בניית מעבד רשימות שניתן להתאים אישית. התוכנית שלכם תיצור פונקציות עיבוד שונות ותשתמש בפונקציית מעבד ראשית שיכולה להחיל כל פעולה על רשימת נתונים.
- קראו קלט מחרוזת שמכיל מספרים המופרדים בפסיקים (לדוגמה,
"10,20,30,40") - קראו קלט מחרוזת שמייצג את סוג הפעולה הראשונה (
"multiply","add", או"subtract") - קראו קלט מחרוזת שמייצג את הערך שיש להשתמש בו עם הפעולה הראשונה (לדוגמה,
"3") - קראו קלט מחרוזת שמייצג את סוג הפעולה השנייה (
"multiply","add", או"subtract") - קראו קלט מחרוזת שמייצג את הערך שיש להשתמש בו עם הפעולה השנייה (לדוגמה,
"5") - פצלו את הקלט הראשון למספרים נפרדים והמירו כל אחד מהם למספר שלם
- צרו שלוש פונקציות פעולה:
multiplyBy- מקבלת שני מספרים שלמים ומחזירה את הראשון כשהוא מוכפל בשניaddTo- מקבלת שני מספרים שלמים ומחזירה את הראשון ועוד השניsubtractFrom- מקבלת שני מספרים שלמים ומחזירה את הראשון פחות השני- צרו פונקציה ראשית בשם
processListWithOperationשמקבלת שלושה פרמטרים: - רשימה של מספרים שלמים
- פונקציה שמקבלת שני מספרים שלמים ומחזירה מספר שלם
- ערך של מספר שלם שיש להשתמש בו עם הפעולה
- הפונקציה
processListWithOperationצריכה להחיל את הפונקציה הנתונה על כל מספר ברשימה, באמצעות הערך שסופק, ולהחזיר רשימה חדשה עם התוצאות - החילו את הפעולה הראשונה על הרשימה המקורית, ואז החילו את הפעולה השנייה על התוצאה של הפעולה הראשונה
- הציגו את התוצאות בדיוק בפורמט שמוצג למטה
לדוגמה, אם הקלטים הם "2,4,6", "multiply", "3", "add", ו-"10", התוכנית שלכם צריכה להציג:
Advanced List Processor
=======================
Original list: [2, 4, 6]
First operation: multiply by 3
After first operation: [6, 12, 18]
Second operation: add 10
Final result: [16, 22, 28]
Processing completed successfullyאם הקלטים הם "15,25,35", "subtract", "5", "multiply", ו-"2", התוכנית שלכם צריכה להציג:
Advanced List Processor
=======================
Original list: [15, 25, 35]
First operation: subtract 5
After first operation: [10, 20, 30]
Second operation: multiply by 2
Final result: [20, 40, 60]
Processing completed successfullyהתוכנית שלכם חייבת להדגים פונקציות מסדר גבוה באמצעות העברת פונקציית הפעולה המתאימה אל processListWithOperation, בהתאם לקלטים שמייצגים את סוגי הפעולות. השתמשו בתנאים כדי לקבוע איזו פונקציה להעביר עבור כל פעולה. הפונקציה processListWithOperation צריכה לעבור על רשימת הקלט, להחיל על כל איבר את הפונקציה הנתונה עם הערך שסופק, ולאסוף את התוצאות ברשימה חדשה. החילו את הפעולות ברצף, תוך שימוש בתוצאה של הפעולה הראשונה כקלט לפעולה השנייה.
נסו בעצמכם
import 'dart:io';
void main() {
// קראו את נתוני הקלט
String? numbersInput = stdin.readLineSync();
String? firstOperation = stdin.readLineSync();
String? firstValue = stdin.readLineSync();
String? secondOperation = stdin.readLineSync();
String? secondValue = stdin.readLineSync();
// המירו את מחרוזת הקלט לרשימת מספרים שלמים
List<int> originalList = numbersInput!.split(',').map((e) => int.parse(e.trim())).toList();
int firstOpValue = int.parse(firstValue!);
int secondOpValue = int.parse(secondValue!);
// TODO: כתבו את הקוד שלכם להלן
// צרו את שלוש פונקציות הפעולה: multiplyBy, addTo, subtractFrom
// צרו את הפונקציה processListWithOperation
// בצעו את הפעולות לפי הסדר ושמרו את התוצאות
// הדפיסו את התוצאות בפורמט הנדרש
print('Advanced List Processor');
print('=======================');
print('Original list: $originalList');
// הדפיסו את הפעולה הראשונה ואת התוצאה
// הדפיסו את הפעולה השנייה ואת התוצאה הסופית
print('Processing completed successfully');
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1מניפולציות מתקדמות ברשימות
מאפייני רשימה: ראשון ואחרוןמצב הרשימה: isEmpty ו-isNotEmpהיפוך רשימההוספה לרשימה: insertהסרת פריטים מרשימה: removeWhereחיפוש ברשימה: indexOfמיון רשימהערבוב רשימהסיכום – מארגן רשימות4מניפולציה מתקדמת של Map
מעבר על Mapבדיקה אם מפתחות וערכים קיימיםמאפייני Map: מפתחות וערכיםהוספה מותנית: putIfAbsentהסרת רשומות מ־MapMaps מקונניםסיכום – עדכון מלאי7פונקציות מתקדמות
פונקציות אנונימיותהעברת פונקציות כארגומנטיםהבנת סגירותמבוא לרקורסיהפונקציה רקורסיבית: ספירה לאחורפונקציה רקורסיבית: עצרתחזרה: מעבד רשימות2פעולות פונקציונליות על רשימות
טרנספורמציה באמצעות 'map'סינון באמצעות 'where'שימוש ב-'.toList()'בדיקת תנאים באמצעות 'any'תנאים באמצעות 'every'איתור באמצעות 'firstWhere'סיכום – סינון נתונים5פרויקט: חישוב עגלת קניות
הגדרת הפרויקטהוספת פריטים לעגלה3קבוצות
מהי קבוצה?יצירת קבוצההוספה והסרה מקבוצותבדיקת נוכחות של איברים בקבוצההמרת רשימה לקבוצהאיחוד קבוצותחיתוך קבוצותהפרש קבוצותסיכום – רשימת אורחים ייחודית6טיפול בסיסי בשגיאות
מהן חריגות?בלוק ה-try-catchתפיסת חריגות באמצעות onבלוק ה-finallyהשלכת חריגהסיכום – חלוקה בטוחה9טיפוסי מנייה (Enums)
מה הם Enums?הגדרת Enum פשוטשימוש ב-Enums במשתניםEnums במשפטי 'switch'סיכום – רמזורתרגלו בעצמכם: קומפיילר Dart אונליין