J'ai eu plusieurs fois un pattern de code problématiques avec les exceptions : une fonction de recherche qui utilise List.find et donc retourne une exception si elle ne trouve rien. La fonction de recherche est utilisé dans plusieurs cas : trouver une information pour générer d'autre donnés, l'absence de l'information est un bug (failwith "internal error"), faire une validation des entrées dans ce cas l'exception génère un log d'erreur. Il peut aussi exister des fonctions qui génèrent normalement l'absence d'une donnée (cas par défaut).
Il existe aussi les fonction de recherche qui utilise la fonction précédente, or on peut oublier ou ce situe la génération de log d'erreur ou pas. On ne sait plus si la fonction appelé remonte tout ses exceptions ou essaye de les gérer (log d'erreur mais pas au bon niveau, cas par défaut qui n'a pas de sens, etc…).
Bref, je ne trouve pas que les exceptions passent à l'échelle. Après un certain nombre de couche, on ne sait plus ce qui passe au travers, ce qui a un comportement par défaut et ce qui génère un log d'erreur.
Il me semble que la lib de janestreet n'utilise pas d'exception mais des types sommes.
[^] # Re: dommage
Posté par Nicolas Boulay (site web personnel) . En réponse au journal The Future of Functional Programming Languages. Évalué à 2.
J'ai eu plusieurs fois un pattern de code problématiques avec les exceptions : une fonction de recherche qui utilise List.find et donc retourne une exception si elle ne trouve rien. La fonction de recherche est utilisé dans plusieurs cas : trouver une information pour générer d'autre donnés, l'absence de l'information est un bug (failwith "internal error"), faire une validation des entrées dans ce cas l'exception génère un log d'erreur. Il peut aussi exister des fonctions qui génèrent normalement l'absence d'une donnée (cas par défaut).
Il existe aussi les fonction de recherche qui utilise la fonction précédente, or on peut oublier ou ce situe la génération de log d'erreur ou pas. On ne sait plus si la fonction appelé remonte tout ses exceptions ou essaye de les gérer (log d'erreur mais pas au bon niveau, cas par défaut qui n'a pas de sens, etc…).
Bref, je ne trouve pas que les exceptions passent à l'échelle. Après un certain nombre de couche, on ne sait plus ce qui passe au travers, ce qui a un comportement par défaut et ce qui génère un log d'erreur.
Il me semble que la lib de janestreet n'utilise pas d'exception mais des types sommes.
"La première sécurité est la liberté"