משיב מוביל
try and catch

שאלה
-
תשובות
-
את טועה.
אם ארעה שגיאה בבלוק ה try במקרה הטוב כל הפונקציה הזו תעוף ובמקרה הרע כל האפליקציה תעוף, בכל מקרה המשך הקוד שבבלוק ה try לא ירוץ
בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.- סומן כתשובה על-ידי Shirly11 יום ראשון 25 דצמבר 2011 16:26
כל התגובות
-
שבוע טוב
חלק ה finally זה קוד שמתקיים תמיד, והוא נועד לבצע קוד שאת רוצה שירוץ בין אם ארעה שגיאה ובין אם לא אירעה, למשל לנקות אובייקטים מהזכרון שהשתמשת בהם בבלוק ה try - את רוצה שזה יקרה כשגרה אבל את רוצה שזה יקרה גם אם קרתה שגיאה ולא כל בלוק ה try רץ, לכן במקום להעתיק את השורות הללו פעמים - פעם בבלוק ה try ופעם בבלוק ה catch (שירוץ כאשר ארעה שגיאה) המציאו את בלוק ה finally שם תמקמי את אותו קוד והוא ירוץ גם אם לא כל שורות הקוד שבבלוק ה try רצו.
הרחבה ודוגמאות ראי כאן:
http://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx
בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה. -
-
את טועה.
אם ארעה שגיאה בבלוק ה try במקרה הטוב כל הפונקציה הזו תעוף ובמקרה הרע כל האפליקציה תעוף, בכל מקרה המשך הקוד שבבלוק ה try לא ירוץ
בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.- סומן כתשובה על-ידי Shirly11 יום ראשון 25 דצמבר 2011 16:26
-
-
את טועה.
אם ארעה שגיאה בבלוק ה try במקרה הטוב כל הפונקציה הזו תעוף ובמקרה הרע כל האפליקציה תעוף, בכל מקרה המשך הקוד שבבלוק ה try לא ירוץ
בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.
לא ברור לי למה כל הפונקציה צריכה לעוף אם יש exception שהתרחש רק בתוך הבלוק של ה try. זו בדיוק המשמעות של "בלוק".
אם התרחש exception בתוך בלוק try, הרי שנגיע ל catch (ו/או ל finally).
אין שום סיבה שבעולם ש"במקרה הטוב כל הפונקציה הזו תעוף" וכו'.
ולעניין השאלה עצמה, הקוד של finally יתבצע תמיד, גם אם בתוך ה try ו/או בתוך ה catch יש את הפקודה return. כלומר לפני ה return יתבצע בלוק ה finally. זה די נוח. אחרת היינו צריכים להיעזר בדגלים משלנו כדי להבין מה צריך לעשות אחרי ה try-catch. -
לזה התכונתי. כאשר קוד שאמור לבצע פעולה מסוימת קרס, המשך הקוד באותו בלוק לא ירוץ (ולפעמים השגיאה היא כזו שלא נרצה לתת לאפליקציה כולה להמשיך לרוץ, אלא נרצה לסגור אותה בצורה מסודרת בהתאם למצב שנוצר) אלא יתבצע הקוד שנמצא ב catch ולכן קוד שחשוב שיתבצע בין אם ארעה שגיאה ובין אם לא אירעה, כמו בדוגמא שכתבתי - ניקוי אוביקטים מהזכרון, עדיף מראש לשים לא ב try אלא ב finally
בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.