Menu
Coddy logo textTech

מילת המפתח '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 נותנת לך שליטה על המועד ועל האופן שבהם שגיאות מדווחות בתוכניות שלך, והופכת את הפונקציות שלך לחסינות וצפויות יותר בעת התמודדות עם מצבים לא תקינים.

challenge icon

אתגר

קל

צרו תוכנית שמממשת אימות קלט באמצעות מילת המפתח throw כדי להעלות חריגות באופן ידני כאשר מתגלים תנאים לא תקינים. האתגר הזה יבחן את הבנתכם כיצד להשתמש ב-throw כדי לדווח על שגיאות בפונקציות שלכם.

הקלטים הבאים יסופקו:

  • מחרוזת username המייצגת את שם המשתמש שבחר המשתמש (שורה זו עשויה להיות ריקה)
  • מספר שלם age המייצג את גיל המשתמש

על התוכנית שלכם:

  1. ליצור פונקציה בשם validateUser שמקבלת מחרוזת ומספר שלם כפרמטרים
  2. לבדוק בתוך הפונקציה אם שם המשתמש ריק (אורכו 0)
  3. אם שם המשתמש ריק, לבצע throw למחרוזת "Username cannot be empty"
  4. לבדוק אם הגיל קטן מ-13
  5. אם הגיל קטן מ-13, לבצע throw למחרוזת "Age must be at least 13"
  6. אם שני האימותים מצליחים, להדפיס "User validation successful"
  7. בפונקציה הראשית, לקרוא ל-validateUser עם ערכי הקלט
  8. להשתמש בבלוק 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;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C++ אונליין