מילת המפתח 'throw'
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 50 מתוך 56.
לפעמים צריך לסמן שהתרחשה שגיאה בקוד שלך, במקום רק ללכוד חריגות שנזרקו על ידי פונקציות אחרות. מילת המפתח throw מאפשרת לך לעורר חריגה באופן ידני כשהתוכנית שלך מזהה בעיה.
אפשר לזרוק סוגים שונים של ערכים כחריגות — מספרים שלמים, מחרוזות או אפילו אובייקטים מותאמים אישית. הנה התחביר הבסיסי:
if (someErrorCondition) {
throw "Error message"; // זורק מחרוזת מילולית
}כשמשתמשים ב־throw, התוכנית מפסיקה מיד את ביצוע הפונקציה הנוכחית ומחפשת בלוק catch שיכול לטפל בערך שנזרק. הדבר שימושי במיוחד לאימות קלט או לבדיקת תנאים שלא אמורים להתרחש במהלך ביצוע רגיל של התוכנית.
הנה דוגמה מעשית לזריקת חריגה בעת זיהוי קלט לא תקין:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}מילת המפתח throw נותנת לך שליטה על המועד ועל האופן שבהם שגיאות מדווחות בתוכניות שלך, והופכת את הפונקציות שלך לחסינות וצפויות יותר בעת התמודדות עם מצבים לא תקינים.
אתגר
קלצרו תוכנית שמממשת אימות קלט באמצעות מילת המפתח throw כדי להעלות חריגות באופן ידני כאשר מתגלים תנאים לא תקינים. האתגר הזה יבחן את הבנתכם כיצד להשתמש ב-throw כדי לדווח על שגיאות בפונקציות שלכם.
הקלטים הבאים יסופקו:
- מחרוזת
usernameהמייצגת את שם המשתמש שבחר המשתמש (שורה זו עשויה להיות ריקה) - מספר שלם
ageהמייצג את גיל המשתמש
על התוכנית שלכם:
- ליצור פונקציה בשם
validateUserשמקבלת מחרוזת ומספר שלם כפרמטרים - לבדוק בתוך הפונקציה אם שם המשתמש ריק (אורכו 0)
- אם שם המשתמש ריק, לבצע
throwלמחרוזת"Username cannot be empty" - לבדוק אם הגיל קטן מ-13
- אם הגיל קטן מ-13, לבצע
throwלמחרוזת"Age must be at least 13" - אם שני האימותים מצליחים, להדפיס
"User validation successful" - בפונקציה הראשית, לקרוא ל-
validateUserעם ערכי הקלט - להשתמש בבלוק
tryכדי לקרוא לפונקציה ובבלוקcatchכדי לטפל בחריגות של מחרוזות שנזרקו
השתמשו בפורמט הפלט המדויק הבא:
כאשר האימות מצליח:
User validation successfulבמקרה של שגיאות אימות:
Validation error: [error_message]זכרו שכאשר משתמשים ב-throw, התוכנית מפסיקה מיד את ביצוע הפונקציה הנוכחית ומחפשת בלוק catch מתאים. בלוק catch צריך לציין את הטיפוס const char* כדי לטפל במחרוזות מילוליות שנזרקו. אם האימות הראשון נכשל, הפונקציה תזרוק חריגה ולא תמשיך לבדוק את התנאי השני.
נסו בעצמכם
#include <iostream>
#include <string>
using namespace std;
int main() {
// קרא את הקלט
string username;
int age;
getline(cin, username);
cin >> age;
// TODO: כתוב כאן את הקוד שלך
// צור את הפונקציה validateUser וממש את לוגיקת האימות
// השתמש בבלוקים של try-catch כדי לטפל בחריגות
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטים8טיפול בסיסי בשגיאות
מבוא לחריגותבלוקי 'try' ו-'catch'מילת המפתח 'throw'סוגים שונים של חריגותמטפל לכל סוגי החריגותסיכום – חלוקה בטוחהתרגלו בעצמכם: קומפיילר C++ אונליין