בלוק ה-try-catch
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 39 מתוך 65.
עכשיו, כשאתה מבין מהן חריגות, בוא נלמד איך לטפל בהן בצורה מסודרת באמצעות בלוק try-catch. זהו הכלי הבסיסי שמונע מהתוכנית שלך לקרוס כשמשהו משתבש.
בלוק try-catch פועל בכך שהוא עוטף קוד שעלול להיות בעייתי במקטע try. אם מתרחש חריג, במקום שהתוכנית שלך תקרוס, Dart עובר מיד למקטע catch, שבו אפשר לטפל בשגיאה כראוי.
try {
// קוד שעלול לגרום לחריגה
int number = int.parse("abc");
} catch (e) {
// קוד שרץ אם מתרחשת חריגה
print("Something went wrong: $e");
}בדוגמה הזאת, ניסיון להמיר את המחרוזת "abc" למספר שלם היה גורם בדרך כלל לקריסה של התוכנית. עם זאת, מכיוון שהיא עטופה בבלוק try, החריגה נתפסת ומטופלת במקום זאת בבלוק catch. המשתנה e מכיל מידע על מה השתבש.
הגישה הזו מאפשרת לתוכנית שלך להמשיך לפעול גם כשמתרחשים מצבים בלתי צפויים, וכך הופכת את הקוד שלך לעמיד וידידותי יותר למשתמש.
אתגר
קלצרו תוכנית שממירה בבטחה מחרוזות קלט של משתמשים למספרים באמצעות בלוק try-catch. התוכנית צריכה לטפל במקרים שבהם הקלט אינו מספר תקין ולמנוע מהתוכנית לקרוס.
- קראו מחרוזת קלט שמייצגת מספר שיש להמיר למספר שלם
- השתמשו בבלוק
try-catchכדי לנסות בבטחה לבצע את ההמרה באמצעותint.parse() - אם ההמרה מצליחה, חשבו את ריבוע המספר (הכפילו אותו בעצמו)
- אם ההמרה נכשלת ומתרחשת חריגה, טפלו בשגיאה בצורה נאותה
- הציגו את התוצאה או את הודעת השגיאה המתאימה בפורמט המדויק שמוצג להלן
לדוגמה, אם הקלט הוא "5", התוכנית צריכה להציג:
Processing input: 5
Conversion successful!
The square of 5 is: 25אם הקלט הוא "abc", התוכנית צריכה להציג:
Processing input: abc
Error: Cannot convert 'abc' to a number
Please enter a valid integerאם הקלט הוא "12", התוכנית צריכה להציג:
Processing input: 12
Conversion successful!
The square of 12 is: 144על התוכנית להשתמש בבלוק try-catch כדי לעטוף את פעולת int.parse(). במקטע try, נסו להמיר את מחרוזת הקלט למספר שלם ולחשב את הריבוע שלו. במקטע catch, טפלו בכל חריגה שמתרחשת במהלך ההמרה והציגו הודעת שגיאה מתאימה. התוכנית צריכה להמשיך לפעול כרגיל, בין שההמרה מצליחה ובין שהיא נכשלת.
נסו בעצמכם
import 'dart:io';
void main() {
// קראו את מחרוזת הקלט
String? input = stdin.readLineSync();
// הציגו הודעת עיבוד
print('Processing input: $input');
// TODO: כתבו את הקוד שלכם למטה
// השתמשו בבלוק try-catch כדי להמיר את הקלט בבטחה למספר שלם
// חשבו את הריבוע אם ההמרה הצליחה
// טפלו בכל חריגה שמתרחשת במהלך ההמרה
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
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 אונליין