AT_EXIT |
A la sortie |
---|---|
Ruby |
Syntaxe
at_exit |
at_exit { bloc } |
Paramètres
Nom | Description |
---|---|
bloc | Ce paramètre permet d'indiquer bloc d'instruction à convertir en procédure. |
Description
Cette fonction permet d'enregistrer un bloc pour un nettoyage lors d'une exécution à la terminaison de l'interpréteur.
Algorithme
* Initialiser une liste vide globale: BLOCS_A_EXECUTER = [] MODULE at_exit(bloc) Ajouter bloc à BLOCS_A_EXECUTER A la fin de l'exécution du programme: BOUCLE POUR CHAQUE bloc dans BLOCS_A_EXECUTER (en ordre inverse) FAIRE Exécuter bloc FIN BOUCLE POUR CHAQUE |
Remarques
- Utilité et concept : La fonction at_exit de Ruby permet de définir des blocs de code à exécuter lorsque le programme se termine, qu'il s'agisse d'une terminaison normale ou d'une interruption due à une exception non interceptée. Cela offre un mécanisme simple pour effectuer des tâches de nettoyage, comme fermer des fichiers ou des connexions réseau, sans avoir à surveiller manuellement chaque point de sortie du programme.
- Syntaxe Intuitive : La syntaxe de at_exit est simple et repose sur des blocs. Un appel typique pourrait ressembler à «at_exit { puts "Fermeture de l'application" }». Ce bloc sera ajouté à une pile et exécuté automatiquement, ce qui rend le code plus lisible et réduit le risque d'oubli de certaines opérations essentielles lors de la terminaison.
- Empilement des Blocs : Ruby exécute les blocs at_exit dans l'ordre inverse de leur déclaration. Cela signifie que le dernier bloc déclaré sera exécuté en premier. Cette propriété permet de gérer les dépendances entre les tâches de nettoyage, par exemple en fermant d'abord les ressources les plus récentes.
- Compatibilité avec les exceptions : Même si une exception non gérée survient et provoque l'arrêt du programme, les blocs at_exit seront exécutés avant la fin. Cette possibilité est particulièrement utile pour s'assurer que des ressources critiques, comme des fichiers ouverts ou des bases de données, sont correctement libérées, même en cas d'échec.
- Limitation aux blocs de nettoyage : Bien que puissante, la fonction at_exit ne devrait pas être utilisée pour du code applicatif ou des calculs. Son objectif principal est de garantir une fermeture propre. L'injection de logique complexe dans ces blocs peut introduire des comportements imprévus lors de la fin du programme.
- Usage Multiples : Il est possible d'appeler at_exit plusieurs fois dans un programme. Chaque appel empile un nouveau bloc à exécuter. Ce mécanisme rend la gestion des tâches finales plus flexible, car différents modules ou parties du code peuvent ajouter leurs propres actions de nettoyage de manière indépendante.
- Différence avec les signaux : Contrairement à la gestion des signaux (comme Signal.trap), at_exit ne répond pas directement à des interruptions spécifiques comme un SIGINT (Ctrl+C). Cependant, si un signal arrête le programme proprement, les blocs at_exit seront toujours exécutés. Pour des terminaisons brutales (par exemple kill -9), ces blocs ne seront pas appelés.
- Intégration avec les tests et scripts : Dans des scripts ou tests Ruby, at_exit peut être utilisé pour générer des rapports ou collecter des métriques une fois toutes les actions principales terminées. Cela peut inclure l'affichage de statistiques de performance, des résultats de tests ou même des notifications à un système externe.
Exemple
Voici un exemple typique de l'utilisation de cette procédure :
Essayer maintenant !
on obtiendra le résultat suivant :
Lancement du programme...Affiche ce message dans le Halt
Dernière mise à jour : Lundi, le 24 novembre 2014