יום שלישי, אוגוסט 12, 2025

הסבר על הטענה שלי לגבי כמות שגיאות על כל תנאי if

אז למה במהלך ה training שלי למתנכתים חדשים בשפת C ושפת C++ אמרתי שכל if זה ארבעה באגים אפשריים (או יותר )?
 if (condition_var)
 {
    do_something();
 }
 
בדוגמא הזאת למשל ה condition_var יכול להיות לא נכון, שימוש בו כערך בוליאני יכול לזרוק חריגה, ה do_something יכול לזרוק חריגה או הוא עצמו יכול להיות שגויי.

עכשיו זו היא דוגמא פשוטה, מה קורה למשל עם הביטויי הבא ?
 if (condition_func(value))
 {
    do_something(other_value);
 }
 
פה למשל ה condition_func עצמו יכול לזרוק חריגה, אבל גם המרת ה value לטיפוס המתאים לפונקציה יכול לייצר חריגות או שגיאות, וגם ערך החזרה שלו יכול לזרוק חריגה, אותו דבר עם ה other_value.
 
הוספתם תנאי אחרת ? ברכותי ייצרתם עכשי וגם קושי בקריאות וגם  עוד שני באגים, תנאי אחרת אם ? זה עוד שלושה או ארבע באגים נוספים אפשריים.

האם זה אומר שכל תנאי זה בעייה ? לא ! האם כל תנאי זה בעייה אפשרית ?כן! לכן צריך תמיד לבדוק ולעשות review לקוד שלכם.

אז מה עושים ? כאשר אפשר נמנעים מתנאים מכוננים, בהתאם לסביבה משתמשים בלוגיקת החזרה ערכי שגיאה ולא בחריגות (ומשתמשים בחריגות כאשר באמת יש חריגה ולא להצגת שגיאות). בדיקת תנאי חזרה של כל פונקציה , שימוש וניהול בחריגות בהתאם לדרישות הסביבה, יש כאלה שדורשים תפיסה בכל פונקציה ואז להמיר זאת לערך חזרה , ויש כאלה שמבקשים שתפיסת חריגות תהיה יחסית גבוהה על מנת לסייע במערכות ניהול ה stack trace, אין פתרון מושלם להכל , פשוט צריך לעבוד במסגרות שקיימות לכם בהתאם ל policy הקיים בקבוצה שלכם. אני אישית ממליץ להשתמש בבודקים הסטטים שיש לכם גישה אליהם, אני משתמש ב VS ובבודקים הסטטים שלו שמקונפגים לצרכים שלי, זה מוצא די הרבה דברים טוב, אבל גם זה אינו מושלם.

בהקשר של חריגות ב C אני מדבר על SEH.

אין תגובות: