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.
Défi
FacileCré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.
- Lisez une chaîne de caractères en entrée représentant le nom du fichier à traiter
- Lisez une chaîne de caractères en entrée représentant le contenu du fichier
- Lisez une chaîne de caractères en entrée indiquant s'il faut simuler une erreur (
"error"ou"success") - Utilisez une structure
try-catch-finallypour 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 - 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 successfullySi 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 errorsSi 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 successfullyVotre 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
}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
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques6Gestion de base des erreurs
Que sont les exceptions ?Le bloc 'try-catch'Intercepter des exceptions avec 'on'Le bloc 'finally'Lever une exceptionRécapitulatif - Division sécurisée