טיפול ב-Exceptions - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

טיפול ב-Exceptions


smalery

Recommended Posts

חג שמח :yelclap:

אני מתכנת ב-C# אבל בטוח שהנושא רלוונטי לרוב השפות (לפחות java ו-c++),

רציתי לדעת איך אני מטפל "נכון" בחריגים.

אני עובד על פרוייקט שמורכב ממחלקה ראשית ומחלקה שכותבת ל-DB (לוג על הפעולות במערכת).

אם למשל נזרקת שגיאה בפתיחת החיבור ל-DB, איפה אני תופס את השגיאה ומציג אותה למשתמש?

מבחינת תכנון נכון, האם אני צריך לתפוס את השגיאה במחלקה הראשית?

האם כל הפונ' שקוראת לפונ' שעלולה לזרוק שגיאה צריך להיות מורכבת מבלוק try ו-catch?

איך צריך לטפל בחריגים במידה ויש לי פרוייקט גדול שמורכב ממחלקה ראשית והרבה מודולים שונים שעלולים לגרום לשגיאות?

תודה :xyxthumbs:

קישור לתוכן
שתף באתרים אחרים

זה תלוי בלוגיקה של התוכנית. אם אתה בפונקציה X קורא לפונקציה Y שיכולה לזרוק חריג E ופונקציה Y יכולה לטפל בחריג הזה אז אתה מטפל בו בפונקציה Y, אם לא אז זה יזרק לקורא של Y.

עכשיו בקשר לאיך מטפלים. שוב זה תלוי בחריג, אם זה חריג שיכול להיפטר לדוגמא אם אתה מנסה לפתוח קובץ LOG.TXT אבל הוא לא קיים אז אתה יכול להודיע למשתמש שקובץ LOG.TXT לא קיים ואני הולך להשתמש בקובץ TEMP.TXT (או לדוגמא קובץ הגדרות של תוכנית, אם הוא לא קיים אתה מודיע שהוא לא קיים, ומשתמש בהגדרות ברירת מחדל) ואז אתה יכול להמשיך ב EXECUTION, מצד שני אם אתה מקבל חריג של NullPointerException (או NullReferenceException ב C#) אז אין לך איך לטפל בזה ואתה צריך לסגור את התוכנית ולהודיע על שגיאה.

קישור לתוכן
שתף באתרים אחרים

הרעיון העיקרי בשימוש ב-exceptions (ולמעשה אחת מהמטרות שלשמן הן נוצרו) זה ש-exception כדאי לתפוס בקטע של התוכנית שיכול לטפל בשגיאה.

לדוגמא: אם יש שגיאה בכתיבה לקובץ באמצע פעולה פנימית, אפשר לתפוס ולטפל ב-Exception בבלוק חיצוני יחסית (לדוגמא ע"י הצגת הודעת שגיאה מתאימה).

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

לגבי C++ יש סט של חוקים בסיסיים (המלצות) לגבי מה לזרוק, מה לתפוס, ואיך לעשות את זה בצורה בטוחה.

התחלה למי שמעוניין: http://www.parashift.com/c++-faq-lite/exceptions.html

עריכה: נראה לי שחלק מהסעיפים גם יעזרו בשפות אחרות כמו JAVA או C#.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...