טיפול בחריגות הוא מנגנון בתוכנה שמזהה ומטפל בבעיות בזמן ריצה. "חריגה" היא אירוע שגורם לשבירה של הריצה הרגילה של התוכנית.
מטרתו היא להפריד בין הקוד שמבצע את המשימה לבין הקוד שמטפל בשגיאות. הפרדה זו עוזרת לקריאות הקוד ולתחזוקה שלו.
יש שגיאות בזמן ההידור ולא בזמן הריצה. מנגנון החריגות מטפל בעיקר בשגיאות ריצה. חלק מהשגיאות אפשר למנוע בניפוי שגיאות (debugging), אך אחרות לא ניתנות למניעה ותצטרכנה טיפול בזמן הריצה.
בקוד יש בדרך כלל שלושה אזורים: Try, Catch ו-Finally. Try (ניסיון) מגדיר קטע שבו עלולה להתרחש חריגה. Catch (לכידה) מקבל ומטפל בחריגה. Finally (קטע מסיים) רץ תמיד, גם אם קרתה חריגה, ומשרת לניקוי משאבים.
בהתרחשות חריגה מחפשים במחסנית הקריאות (stack) פונקציה עם Catch מתאים. החיפוש מתחיל מהפונקציה הפעילה למטה. אם נמצא Catch, התוכנית עוברת לטפל שם. אם לא נמצא, התוכנית מסתיימת.
שימוש בתכנות חריגות פוגע בביצועים, לכן מומלץ להשתמש בו בעיקר לטיפול בשגיאות אמיתיות, ולא לשלוט בזרימת התוכנית במקום לולאות או בדיקות רגילות.
יתרונות עיקריים הם הפרדה בין קוד רגיל לקוד שגיאות ושיפור קריאות. חסרון בולט הוא פגיעה בביצועים אם משתמשים במנגנון לעתים תכופות.
מנגנון זה התפתח עם C++ ואומץ בהדרגה על ידי שפות וכלים נוספים. סביבת פיתוח מודרנית תומכת בטיפול מלא בחריגות.
בשפות אובייקט־מונחות אפשר לזרוק חריגה מפונקציות בונות, אבל זה יכול ליצור בעיות בזמן אתחול גלובלי. כשחריגה יוצאת מ־Try, המפרקות (הפונקציות שמשחררות זיכרון) נקראות אוטומטית, וכך מתקבל קוד בטוח יותר.
בנוסף, בפולימורפיזם (תכונת חפיפה בין סוגי אובייקטים) אפשר ללכוד חריגות בעזרת התייחסות למחלקת שגיאות בסיסית. ניתן גם ליצור מחלקות שגיאה מותאמות לתוכנית מתוך ספריית המחלקות הקיימת.
טיפול בחריגות הוא דרך שבתוכנית מתמודדת עם בעיות שקרו בזמן ריצה. "חריגה" זאת בעיה שפתאום מפריעה לתוכנית.
מטרה מרכזית היא להפריד בין הקוד שעושה את העבודה לבין הקוד שמתקן בעיות. זה עושה את התוכנית מסודרת יותר.
יש שגיאות לפני הריצה, ושגיאות בזמן ריצה. המנגנון מטפל בשגיאות בזמן ריצה.
משתמשים בשלושה חלקים: Try (ניסיון), Catch (לכידה) ו-Finally (סיום).
Try מנסה להריץ קטע קוד. Catch תופסת את הבעיה ומטפלת בה. Finally רץ תמיד ועוזר לנקות דברים כמו סגירת קבצים.
כשיש בעיה, המחשב מחפש פונקציה שתדע לטפל בה. אם לא מוצאים כזו, התוכנית נעצרת.
בשפות עם אובייקטים, כשחריגה קורה, המערכת משחררת זיכרון של האובייקטים. אפשר גם להגדיר סוגי שגיאות מותאמים לתוכנית.
תגובות גולשים