Menu
Coddy logo textTech

Blok „finally”

Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 41 z 65.

Czasami potrzebujesz kodu, który wykona się niezależnie od tego, co wydarzy się w bloku try-catch. Blok finally służy właśnie do tego — zawiera kod, który zawsze się wykonuje, niezależnie od tego, czy wystąpi wyjątek.

Blok finally występuje po blokach try i catch. Nawet jeśli kod wykona się pomyślnie w sekcji try albo wyjątek zostanie przechwycony i obsłużony, blok finally i tak zostanie wykonany.

try {
  // Kod, który może spowodować wyjątek
  int result = 10 ~/ 2;
  print("Result: $result");
} catch (e) {
  print("An error occurred: $e");
} finally {
  print("This always runs!");
}

Dzięki temu blok finally doskonale nadaje się do operacji porządkowych, takich jak zamykanie plików, zwalnianie zasobów czy rejestrowanie informacji o zakończeniu operacji. Niezależnie od tego, co wydarzy się podczas obsługi błędów, możesz mieć pewność, że określony kod zawsze zostanie wykonany.

challenge icon

Wyzwanie

Łatwy

Utwórz program demonstrujący blok finally poprzez zaimplementowanie symulatora przetwarzania plików, który zawsze wykonuje operacje porządkowe, niezależnie od tego, czy podczas przetwarzania wystąpi błąd.

  1. Wczytaj ciąg znaków reprezentujący nazwę pliku do przetworzenia
  2. Wczytaj ciąg znaków reprezentujący zawartość pliku
  3. Wczytaj ciąg znaków określający, czy symulować błąd ("error" lub "success")
  4. Użyj struktury try-catch-finally, aby zasymulować przetwarzanie pliku:
    • W bloku try: sprawdź, czy symulacja błędu ma wartość "error", i jeśli tak, zgłoś wyjątek z komunikatem "File processing failed"; w przeciwnym razie przetwórz plik pomyślnie
    • W bloku catch: obsłuż każdy wyjątek, który wystąpi podczas przetwarzania
    • W bloku finally: zawsze wykonaj operacje porządkowe, niezależnie od tego, czy przetwarzanie zakończyło się powodzeniem, czy niepowodzeniem
  5. Wyświetl wyniki przetwarzania dokładnie w formacie pokazanym poniżej

Na przykład, jeśli dane wejściowe to "document.txt", "Hello World", "success", program powinien wyświetlić:

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

Jeśli dane wejściowe to "report.pdf", "Annual Report Data", "error", program powinien wyświetlić:

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

Jeśli dane wejściowe to "config.json", "{\"setting\": \"value\"}", "success", program powinien wyświetlić:

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

Twój program musi używać struktury try-catch-finally, w której blok finally zawsze wykonuje trzy operacje porządkowe w dokładnie takiej kolejności, jak pokazano. W bloku try sprawdź, czy dane wejściowe symulujące błąd są równe "error", i jeśli tak, zgłoś wyjątek. Jeśli nie jest symulowany żaden błąd, policz znaki w zawartości pliku, używając właściwości length. Blok finally powinien zawsze wyświetlać komunikaty o porządkowaniu i określać końcowy status na podstawie tego, czy wystąpił błąd.

Spróbuj swoich sił

import 'dart:io';

void main() {
  // Odczytaj dane wejściowe
  String? filename = stdin.readLineSync();
  String? content = stdin.readLineSync();
  String? errorSimulation = stdin.readLineSync();
  
  // Wyświetl nagłówek systemowy
  print("File Processing System");
  print("======================");
  print("Opening file: $filename");
  print("File content: $content");
  
  // TODO: Napisz swój kod poniżej
  // Użyj struktury try-catch-finally, aby zasymulować przetwarzanie pliku
  // - W bloku try: sprawdź, czy errorSimulation jest równe "error", a jeśli tak, rzuć wyjątek
  // - W bloku catch: obsłuż dowolny wyjątek
  // - W bloku finally: zawsze wykonuj operacje porządkowe
  
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Dart online