C++:
טיפול בשגיאות

איך ל:

הנה חסימת try-catch בסיסית לטיפול בחריגה:

#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::runtime_error("אופס! משהו השתבש.");
    } catch (const std::exception& e) {
        std::cerr << "שגיאה: " << e.what() << std::endl;
    }
    return 0;
}

פלט לדוגמא:

שגיאה: אופס! משהו השתבש.

עיון נוסף

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

לאחר מכן הגיעו חריגות עם C++ כדי לתת לנו דרך מובנית להתמודד עם בעיות בלתי צפויות. חריגה נזרקת עם throw ונתפסת עם try/catch.

שני סוגים של שגיאות בדרך כלל קורות עלינו: שגיאות לוגיות, כמו חישוב שגוי, ושגיאות זמן ריצה, כמו גישה לכתובת זיכרון לא תקינה. חריגות הן אידיאליות לשגיאות זמן ריצה. לעומת זאת, לשגיאות לוגיות, לעיתים עדיף להשתמש באסטמציות או קודי שגיאה.

יש דיון מתמשך בנושא חריגות מול קודי שגיאה. חריגות יכולות להיות איטיות ועלולות לגרום לזרימות בקרה מורכבות. קודי שגיאה לעומת זאת, אף על פי שהם מהירים יותר, עלולים לגרום לקוד להיות מעורבב וקשה לתחזוקה. זהו דילמה, ולכן חשוב להבין את תרחיש השימוש.

C++17 הביא את std::optional ו-std::variant, שהם אלטרנטיבות לחריגות. הם שימושיים לפונקציות שיתכן ויחזירו תוצאה תקפה או לא.

ביטחון חריגות יכול להיות כאב ראש נוסף. מדובר על הבטחות שהקוד שלך מעניק למרות החריגות. ישנם שלושה רמות: בסיסית, חזקה, ו-nothrow. ככל שיש יותר הבטחות, הקוד שלך עשוי להיות מורכב יותר.

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

ראה גם