none
try and catch RRS feed

תשובות

  • את טועה.

    אם ארעה שגיאה בבלוק ה try במקרה הטוב כל הפונקציה הזו תעוף ובמקרה הרע כל האפליקציה תעוף, בכל מקרה המשך הקוד שבבלוק ה try לא ירוץ


    בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.
    • סומן כתשובה על-ידי Shirly11 יום ראשון 25 דצמבר 2011 16:26
    יום ראשון 25 דצמבר 2011 11:45

כל התגובות

  • שבוע טוב

    חלק ה finally זה קוד שמתקיים תמיד, והוא נועד לבצע קוד שאת רוצה שירוץ בין אם ארעה שגיאה ובין אם לא אירעה, למשל לנקות אובייקטים מהזכרון שהשתמשת בהם בבלוק ה try - את רוצה שזה יקרה כשגרה אבל את רוצה שזה יקרה גם אם קרתה שגיאה ולא כל בלוק ה try רץ, לכן במקום להעתיק את השורות הללו פעמים - פעם בבלוק ה try ופעם בבלוק ה catch (שירוץ כאשר ארעה שגיאה) המציאו את בלוק ה finally  שם תמקמי את אותו קוד והוא ירוץ גם אם לא כל שורות הקוד שבבלוק ה try רצו.

    הרחבה ודוגמאות ראי כאן:

    http://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx


    בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.
    • סומן כתשובה על-ידי Shirly11 יום ראשון 25 דצמבר 2011 09:13
    • סימון כתשובה בוטל על-ידי Shirly11 יום ראשון 25 דצמבר 2011 09:14
    • הוצע כתשובה על-ידי maisels יום רביעי 14 מרץ 2012 12:14
    שבת 24 דצמבר 2011 17:45
  • נכון, ובגלל זה אפשר פשוט להמשיך את הקוד כרגיל בלי קוד finally , שהרי המשך הקוד יתבצע תמיד..בדיוק כמו finally..או שאני טועה?
    יום ראשון 25 דצמבר 2011 09:16
  • את טועה.

    אם ארעה שגיאה בבלוק ה try במקרה הטוב כל הפונקציה הזו תעוף ובמקרה הרע כל האפליקציה תעוף, בכל מקרה המשך הקוד שבבלוק ה try לא ירוץ


    בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.
    • סומן כתשובה על-ידי Shirly11 יום ראשון 25 דצמבר 2011 16:26
    יום ראשון 25 דצמבר 2011 11:45
  • תודה !!
    יום ראשון 25 דצמבר 2011 16:27
  • את טועה.

    אם ארעה שגיאה בבלוק ה try במקרה הטוב כל הפונקציה הזו תעוף ובמקרה הרע כל האפליקציה תעוף, בכל מקרה המשך הקוד שבבלוק ה try לא ירוץ


    בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.

    לא ברור לי למה כל הפונקציה צריכה לעוף אם יש exception שהתרחש רק בתוך הבלוק של ה try. זו בדיוק המשמעות של "בלוק".
    אם התרחש exception בתוך בלוק try, הרי שנגיע ל catch (ו/או ל finally).
    אין שום סיבה שבעולם ש"במקרה הטוב כל הפונקציה הזו תעוף" וכו'.

    ולעניין השאלה עצמה, הקוד של finally יתבצע תמיד, גם אם בתוך ה try ו/או בתוך ה catch יש את הפקודה return. כלומר לפני ה return יתבצע בלוק ה finally. זה די נוח. אחרת היינו צריכים להיעזר בדגלים משלנו כדי להבין מה צריך לעשות אחרי ה try-catch.
    יום שני 26 דצמבר 2011 21:21
  • לזה התכונתי. כאשר קוד שאמור לבצע פעולה מסוימת קרס, המשך הקוד באותו בלוק לא ירוץ (ולפעמים השגיאה היא כזו שלא נרצה לתת לאפליקציה כולה להמשיך לרוץ, אלא נרצה לסגור אותה בצורה מסודרת בהתאם למצב שנוצר) אלא יתבצע הקוד שנמצא ב catch ולכן קוד שחשוב שיתבצע בין אם ארעה שגיאה ובין אם לא אירעה, כמו בדוגמא שכתבתי - ניקוי אוביקטים מהזכרון, עדיף מראש לשים לא ב try אלא ב finally


    בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.
    יום שני 26 דצמבר 2011 21:42