בלוק finally
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C# של Coddy. שיעור 27 מתוך 66.
בלוק finally מכיל קוד שתמיד מתבצע, בין אם מתרחש חריג ובין אם לא, גם אם יש משפט return בבלוקים try או catch.
יצירת מבנה בסיסי של try-catch-finally:
try
{
// קוד שעלול לזרוק חריגה
int result = 10 / 2;
Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
// קוד שמטפל בחריגה
Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
// קוד שמתבצע תמיד
Console.WriteLine("This always executes");
}
בלוק finally שימושי למשימות ניקוי, כמו סגירת קבצים או חיבורי מסד נתונים:
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader("data.txt");
string content = file.ReadToEnd();
Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
Console.WriteLine("File not found.");
}
finally
{
// יש לסגור את הקובץ תמיד, גם אם התרחשה חריגה
if (file != null)
{
file.Close();
}
}
אתגר
קלצור מתודה בשם ProcessData ש:
- מקבלת פרמטר מחרוזת שמייצג שם קובץ
- מנסה לפתוח את הקובץ ולקרוא את התוכן שלו
- כותבת את התוכן למסוף
- מנקה כראוי את המשאבים באמצעות בלוק finally
- מטפלת ב־FileNotFoundException וב־IOException
אם לא ניתן למצוא את הקובץ, הדפס: "ERROR: File not found: [filename]"
אם מתרחשת שגיאת IO אחרת, הדפס: "ERROR: Could not read the file: [error message]"
הדפס תמיד "File operation completed." בבלוק finally, בין אם התרחשה חריגה ובין אם לא.
נסו בעצמכם
using System;
using System.IO;
class Program
{
public static void ProcessData(string filename)
{
// כתבו את הקוד שלכם כאן
}
static void Main(string[] args)
{
string filename = Console.ReadLine();
ProcessData(filename);
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מערכים רב־ממדיים
יסודות מערכים דו־ממדייםהכרזה ואתחול של מערכים דו־ממדייםגישה לאיברי מערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםמערכים משונניםפעולות מטריצה נפוצותחזרה – מערכים רב־ממדיים7אופרטורים לוגיים מתקדמים
הערכה בקיצור דרךאופרטורים לוגיים מותניםקדימות אופרטוריםסיכום – אופרטורים מתקדמים2קבלת החלטות מתקדמת
תנאים מרוביםלוגיקה בוליאנית מורכבתהשוואה בין If ל-Switchהצהרות Switch מקוננותסיכום — קבלת החלטות מתקדמת5טיפול בחריגות
יסודות try-catchסוגי חריגותבלוקי catch מרוביםעבודה עם קבציםבלוק finallyשימוש ב-using לעומת try-finallyחריגות מותאמות אישיתסיכום – טיפול בשגיאות3שיפורים בלולאות
ביצועי לולאותאיטרציה במבנים מורכביםכל אחד מסוגי הלולאותרפקטורינג של לולאותסיכום – לולאות שעברו אופטימיזציה6טיפול בערכי Null
יסודות הפניה ל-Nullטיפוסי ערכים שניתנים ל-Nullדפוסי בדיקת Nullתכנות הגנתיסיכום – בטיחות מול Nullתרגלו בעצמכם: קומפיילר C# אונליין