Menu
Coddy logo textTech

Le bloc 'finally'

Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 41 sur 65.

Parfois, vous avez besoin d'un code qui s'exécute quoi qu'il arrive dans votre bloc try-catch. Le bloc finally sert précisément à cela - il contient du code qui s'exécute toujours, qu'une exception se produise ou non.

Le bloc finally vient après vos blocs try et catch. Même si votre code s'exécute avec succès dans la section try, ou si une exception est interceptée et gérée, le bloc finally s'exécutera tout de même.

try {
  // Code qui pourrait provoquer une exception
  int result = 10 ~/ 2;
  print("Result: $result");
} catch (e) {
  print("An error occurred: $e");
} finally {
  print("This always runs!");
}

Cela rend le bloc finally parfait pour les opérations de nettoyage comme la fermeture de fichiers, la libération de ressources ou la journalisation du fait qu'une opération est terminée. Peu importe ce qui se passe dans votre gestion des erreurs, vous pouvez garantir qu'un certain code s'exécutera toujours.

challenge icon

Défi

Facile

Créez un programme qui démontre l'utilisation du bloc finally en implémentant un simulateur de traitement de fichiers qui effectue toujours des opérations de nettoyage, qu'une erreur survienne ou non pendant le traitement.

  1. Lisez une chaîne de caractères en entrée représentant le nom du fichier à traiter
  2. Lisez une chaîne de caractères en entrée représentant le contenu du fichier
  3. Lisez une chaîne de caractères en entrée indiquant s'il faut simuler une erreur ("error" ou "success")
  4. Utilisez une structure try-catch-finally pour simuler le traitement du fichier :
    • Dans le bloc try : Vérifiez si la simulation d'erreur est "error" et levez une exception avec le message "File processing failed" si c'est le cas, sinon traitez le fichier avec succès
    • Dans le bloc catch : Gérez toute exception survenant pendant le traitement
    • Dans le bloc finally : Effectuez toujours les opérations de nettoyage, quel que soit le succès ou l'échec
  5. Affichez les résultats du traitement dans le format exact indiqué ci-dessous

Par exemple, si les entrées sont "document.txt", "Hello World", "success", votre programme devrait afficher :

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

Si les entrées sont "report.pdf", "Annual Report Data", "error", votre programme devrait afficher :

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

Si les entrées sont "config.json", "{\"setting\": \"value\"}", "success", votre programme devrait afficher :

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

Votre programme doit utiliser une structure try-catch-finally où le bloc finally exécute toujours les trois opérations de nettoyage dans l'ordre exact indiqué. Dans le bloc try, vérifiez si l'entrée de simulation d'erreur est égale à "error" et levez une exception si c'est le cas. Si aucune erreur n'est simulée, comptez les caractères du contenu du fichier à l'aide de la propriété length. Le bloc finally doit toujours afficher les messages de nettoyage et déterminer le statut final d'achèvement selon qu'une erreur s'est produite ou non.

Aide-mémoire

Le bloc finally contient du code qui s'exécute toujours après try-catch, qu'une exception se produise ou non.

try {
  // Code qui pourrait causer une exception
  int result = 10 ~/ 2;
  print("Result: $result");
} catch (e) {
  print("An error occurred: $e");
} finally {
  print("This always runs!");
}

Le bloc finally est parfait pour les opérations de nettoyage comme la fermeture de fichiers, la libération de ressources ou l'enregistrement de l'état d'achèvement.

Essayez vous-même

import 'dart:io';

void main() {
  // Lire l'entrée
  String? filename = stdin.readLineSync();
  String? content = stdin.readLineSync();
  String? errorSimulation = stdin.readLineSync();
  
  // Afficher l'en-tête du système
  print("File Processing System");
  print("======================");
  print("Opening file: $filename");
  print("File content: $content");
  
  // TODO: Écrivez votre code ci-dessous
  // Utiliser une structure try-catch-finally pour simuler le traitement de fichier
  // - Dans le bloc try : vérifier si errorSimulation est égal à "error" et lever une exception si c'est vrai
  // - Dans le bloc catch : gérer n'importe quelle exception
  // - Dans le bloc finally : toujours effectuer les opérations de nettoyage
  
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux