Menu
Coddy logo textTech

'finally' Bloğu

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 41 / 65.

Bazen try-catch bloğunuzda ne olursa olsun çalışan bir koda ihtiyaç duyarsınız. finally bloğu tam olarak bu amaca hizmet eder; bir istisna oluşsa da oluşmasa da her zaman yürütülen kodları içerir.

finally bloğu, try ve catch bloklarınızdan sonra gelir. try bölümündeki kodunuz başarıyla çalışsa bile veya bir istisna yakalanıp işlense bile, finally bloğu yine de yürütülecektir.

try {
  // İstisnaya neden olabilecek kod
  int result = 10 ~/ 2;
  print("Result: $result");
} catch (e) {
  print("An error occurred: $e");
} finally {
  print("This always runs!");
}

Bu, finally bloğunu dosyaları kapatmak, kaynakları serbest bırakmak veya bir işlemin tamamlandığını günlüğe kaydetmek gibi temizleme işlemleri için mükemmel hale getirir. Hata yönetiminizde ne olursa olsun, belirli kodların her zaman çalışacağını garanti edebilirsiniz.

challenge icon

Görev

Kolay

İşleme sırasında bir hata oluşup oluşmadığına bakılmaksızın her zaman temizleme işlemlerini gerçekleştiren bir dosya işleme simülatörü uygulayarak finally bloğunu gösteren bir program oluşturun.

  1. İşlenecek dosya adını temsil eden bir dize girişi okuyun
  2. Dosya içeriğini temsil eden bir dize girişi okuyun
  3. Bir hata simülasyonu yapılıp yapılmayacağını temsil eden bir dize girişi okuyun ("error" veya "success")
  4. Dosya işlemeyi simüle etmek için bir try-catch-finally yapısı kullanın:
    • try bloğunda: Hata simülasyonunun "error" olup olmadığını kontrol edin ve doğruysa "File processing failed" mesajıyla bir istisna fırlatın, aksi takdirde dosyayı başarıyla işleyin
    • catch bloğunda: İşleme sırasında oluşan tüm istisnaları ele alın
    • finally bloğunda: Başarı veya başarısızlıktan bağımsız olarak her zaman temizleme işlemlerini gerçekleştirin
  5. İşleme sonuçlarını aşağıda gösterilen tam formatta görüntüleyin

Örneğin, girişler "document.txt", "Hello World", "success" ise programınızın çıktısı şöyle olmalıdır:

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

Girişler "report.pdf", "Annual Report Data", "error" ise programınızın çıktısı şöyle olmalıdır:

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

Girişler "config.json", "{\"setting\": \"value\"}", "success" ise programınızın çıktısı şöyle olmalıdır:

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

Programınız, finally bloğunun her zaman üç temizleme işlemini gösterilen tam sırayla yürüttüğü bir try-catch-finally yapısı kullanmalıdır. try bloğunda, hata simülasyonu girişinin "error" değerine eşit olup olmadığını kontrol edin ve doğruysa bir istisna fırlatın. Herhangi bir hata simüle edilmezse, length özelliğini kullanarak dosya içeriğindeki karakterleri sayın. finally bloğu her zaman temizleme mesajlarını yazdırmalı ve bir hata oluşup oluşmadığına bağlı olarak nihai tamamlanma durumunu belirlemelidir.

Kopya kağıdı

finally bloğu, bir istisna oluşup oluşmadığına bakılmaksızın, try-catch yapısından sonra her zaman çalışan kodları içerir.

try {
  // Code that might cause an exception
  int result = 10 ~/ 2;
  print("Result: $result");
} catch (e) {
  print("An error occurred: $e");
} finally {
  print("This always runs!");
}

finally bloğu; dosyaları kapatmak, kaynakları serbest bırakmak veya tamamlanma durumunu günlüğe kaydetmek gibi temizleme işlemleri için mükemmeldir.

Kendin dene

import 'dart:io';

void main() {
  // Girişi oku
  String? filename = stdin.readLineSync();
  String? content = stdin.readLineSync();
  String? errorSimulation = stdin.readLineSync();
  
  // Sistem başlığını görüntüle
  print("File Processing System");
  print("======================");
  print("Opening file: $filename");
  print("File content: $content");
  
  // TODO: Kodunuzu aşağıya yazın
  // Dosya işlemeyi simüle etmek için try-catch-finally yapısını kullanın
  // - try bloğunda: errorSimulation "error" değerine eşitse kontrol edin ve doğruysa istisna fırlatın
  // - catch bloğunda: herhangi bir istisnayı ele alın
  // - finally bloğunda: her zaman temizleme işlemlerini gerçekleştirin
  
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler