תכנות מתקדם ב-Java/חריגות זמן ריצה: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Gran (שיחה | תרומות)
ביטול גרסה 79834 של 84.229.155.32 (שיחה)
Johnny Zoo (שיחה | תרומות)
מוטיבציה
שורה 1:
{{תכנות מתקדם ב-Java}}
פעמים רבות מגיעה תוכנית למצב בו משהו איננו כשורה, למשל - המשתמש הכניס קלט לא נכון, קובץ מסויים לא מצליח להיפתח, וכדומה. עד כה, הטיפול בבעיות כאלה הוגבל לבדיקות פשוטות שיכולנו לבצע כדי להימנע מהגעה למצב בעייתי עבור התוכנית,. כמולמשל - בדיקה לפני גישה למערך שהאיבר אותו נרצה לקבל הוא אכן חוקי.
 
מנגנון משוכלל יותר לטיפול בבעיות הוא בעזרת '''חריגות זמן ריצה''' (באנגלית: '''Exceptions''').
מנגנון זה, למרות חיוניותו, הוא מוגבל, ועשוי להיות מסורבל. דוגמה לכך אפשר לראות דווקה משפת C, בה מנגנון חריגות אינו קיים. בשפה זו אפשר לראות קטע קוד שנראה בערך כך:
<source lang="c">
int ret;
data *a;
 
ret = do_something(a);
if (FAILED(ret)) {
goto fail;
}
 
ret = do_another_thing(a);
if (FAILED(ret)) {
goto fail;
}
 
ret = do_more(a);
if (FAILED(ret)) {
goto fail;
}
 
</source>
הקוד עצמו לא מעניין במיוחד. הנקודה העיקרית היא שאפשר לראות שורה של פעולות, אשר כל אחת מהן דורשת בדיקה נפרדת, מה שמביא לקוד ארוך ומסורבל. בדרך אגב נציין כאן שב-Java המילה goto היא אמנם מילה שמורה, אך אינה ממומשת - לא ניתן להשתמש בה (מסיבות טובות!). הסרבול לא מסתיים כאן. למשל, גישה "בטוחה" למערך (כלומר, כזו שלא תגרום לתכנית בלי מנגנון חריגות לקרוס) תדרוש לפחות שתי בדיקות: האיבר חיובי, וקטן מגודל המערך. במקרים אחרים, ניתן להגיע בקלות גם למספר גדול הרבה יותר של בדיקות. התוצאה - הקוד מסורבל, וקל מאוד לשכוח בדיקות חיוניות.
 
כדי להתגבר על בעיות אלו, הומצא מנגנון משוכלל יותר לטיפול בבעיות, הוא בעזרת '''חריגות זמן ריצה''' (באנגלית: '''Exceptions''').
 
==טיפול בחריגות==