Menu
Coddy logo textTech

בלוק ה-finally

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 41 מתוך 65.

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

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

try {
  // קוד שעלול לגרום לחריגה
  int result = 10 ~/ 2;
  print("Result: $result");
} catch (e) {
  print("An error occurred: $e");
} finally {
  print("This always runs!");
}

כך בלוק ה־finally מתאים במיוחד לפעולות ניקוי, כמו סגירת קבצים, שחרור משאבים או רישום ביומן שהפעולה הושלמה. לא משנה מה יקרה במהלך הטיפול בשגיאות, אפשר להבטיח שקוד מסוים תמיד ירוץ.

challenge icon

אתגר

קל

צרו תוכנית שמדגימה את בלוק finally באמצעות מימוש סימולטור לעיבוד קבצים שמבצע תמיד פעולות ניקוי, ללא קשר לשאלה אם מתרחשת שגיאה במהלך העיבוד.

  1. קראו קלט מסוג מחרוזת שמייצג את שם הקובץ לעיבוד
  2. קראו קלט מסוג מחרוזת שמייצג את תוכן הקובץ
  3. קראו קלט מסוג מחרוזת שמייצג אם לדמות שגיאה ("error" או "success")
  4. השתמשו במבנה try-catch-finally כדי לדמות עיבוד קבצים:
    • בבלוק try: בדקו אם הדמיית השגיאה היא "error", ואם כן זרקו חריגה עם ההודעה "File processing failed"; אחרת, עבדו את הקובץ בהצלחה
    • בבלוק catch: טפלו בכל חריגה שמתרחשת במהלך העיבוד
    • בבלוק finally: בצעו תמיד פעולות ניקוי, ללא קשר להצלחה או לכישלון
  5. הציגו את תוצאות העיבוד בדיוק בפורמט שמוצג להלן

לדוגמה, אם הקלטים הם "document.txt", "Hello World", "success", התוכנית שלכם צריכה להפיק:

File Processing System
======================
Opening file: document.txt
File content: Hello World
Processing file successfully...
File processed: 11 characters found
Cleanup: Closing file handles
Cleanup: Releasing memory resources
Cleanup: Logging operation completion
Processing completed successfully

אם הקלטים הם "report.pdf", "Annual Report Data", "error", התוכנית שלכם צריכה להפיק:

File Processing System
======================
Opening file: report.pdf
File content: Annual Report Data
Error occurred: File processing failed
Unable to complete file processing
Cleanup: Closing file handles
Cleanup: Releasing memory resources
Cleanup: Logging operation completion
Processing completed with errors

אם הקלטים הם "config.json", "{\"setting\": \"value\"}", "success", התוכנית שלכם צריכה להפיק:

File Processing System
======================
Opening file: config.json
File content: {"setting": "value"}
Processing file successfully...
File processed: 20 characters found
Cleanup: Closing file handles
Cleanup: Releasing memory resources
Cleanup: Logging operation completion
Processing completed successfully

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

נסו בעצמכם

import 'dart:io';

void main() {
  // קראו את הקלט
  String? filename = stdin.readLineSync();
  String? content = stdin.readLineSync();
  String? errorSimulation = stdin.readLineSync();
  
  // הציגו את כותרת המערכת
  print("File Processing System");
  print("======================");
  print("Opening file: $filename");
  print("File content: $content");
  
  // TODO: כתבו את הקוד שלכם למטה
  // השתמשו במבנה try-catch-finally כדי לדמות עיבוד קובץ
  // - בבלוק try: בדקו אם errorSimulation שווה ל-"error" וזרקו חריגה אם כן
  // - בבלוק catch: טפלו בכל חריגה
  // - בבלוק finally: בצעו תמיד פעולות ניקוי
  
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Dart אונליין