Menu
CoddyTech

מילת המפתח '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;
}

הקורא עוטף את הקריאה בבלוק try. למחרוזת מילולית שנזרקת יש את הטיפוס const char*, ולכן זהו הטיפוס ששמו מצוין בבלוק catch, והפרמטר שלו מכיל את ההודעה:

try {
    checkAge(-5);
} catch (const char* message) {
    std::cout << "Error: " << message << std::endl;
}
// פלט: Error: Age cannot be negative!

מילת המפתח 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;

// TODO: כתבו כאן את הפונקציה validateUser, מעל main
// הפונקציה מקבלת string בשם username ו-int בשם age, וזורקת מחרוזת מילולית כאשר בדיקה נכשלת

int main() {
    // קראו קלט
    string username;
    int age;
    getline(cin, username);
    cin >> age;
    
    // TODO: קראו ל-validateUser בתוך בלוק try
    // ותפסו את ההודעה שנזרקה באמצעות catch (const char* error)
    
    return 0;
}
quiz iconבחנו את עצמכם

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

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

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