Est-ce considéré comme une mauvaise pratique de jeter NotImplementedException
du code que vous n'avez pas encore écrit? Peut-être que les commentaires TODO seraient considérés comme plus sûrs?
.net
comments
coding
exceptions
Tom Squires
la source
la source
Réponses:
Je pense que
NotImplementedException
c'est en fait une bonne pratique.En effet, si vous oubliez d'implémenter une méthode, et que vous l'utilisez plus tard dans votre projet (et croyez-moi, cela arrive), vous pourriez passer beaucoup de temps à déboguer à chercher ce qui s'est mal passé pas à pas. Si vous avez l'exception, le programme s'arrêtera directement, provoquant l'exception (si vous interceptez l'exception, vous la trouverez rapidement en recherchant quelle exception vous avez interceptée).
Je recommanderais d'utiliser les commentaires
NotImplementedException
combinés avec TODO, de cette façon, vous combinez l'aide de l'interface graphique (avec les tâches dans VS) et la sécurité du programme.Pour la version finale, c'est encore plus important à mon avis, car dans la plupart des cas, vous préféreriez que votre programme plante plutôt que d'avoir un programme qui fonctionne apparemment correctement mais produise des résultats erronés.
la source
NotImplementedException
s de la même manière que les commentaires TODO. Je pense que c'est une fonctionnalité intéressante.Cela dépend de votre philosophie générale concernant les erreurs et la gestion des erreurs. Je suis du genre "erreur grave": je vais lancer une exception au moindre indice que quelque chose pourrait mal tourner; J'affirmerai tout; S'il y a une erreur, si quelque chose devait être là, et ce n'est pas le cas, ou si quelque chose est là, et ça ne devrait pas, l'univers entier doit s'arrêter. Le son d'exclamation des fenêtres doit sonner de façon inquiétante à travers les haut-parleurs.
Il y a d'autres personnes qui préfèrent ne pas se soucier des erreurs. Que se passe-t-il si nous l'envoyons au client et que le module de rapports complet est manquant parce que nous avons oublié de le coder et que personne lors des tests ne s'en est rendu compte, car l'application était trop silencieuse à ce sujet? Mieux vaut ne rien faire, que de jeter une exception au visage du client!
la source
Je dirais que c'est une bonne idée. Habituellement, je vois ces exceptions levées par du code squelette qui est généré automatiquement à partir d'un formulaire ou d'un diagramme ou quelque chose. L'exception me rappelle d'implémenter le code, et elle garantit qu'il y aura des erreurs si j'essaie d'utiliser la fonctionnalité qui a été configurée mais jamais complètement implémentée. Parfois, je vais le supprimer ou le remplacer par quelque chose qui est moins susceptible d'arrêter l'exécution (comme imprimer un avertissement sur la console), mais je trouve que cela fonctionne pour moi.
Si vous créez une bibliothèque que d'autres utiliseront, cette exception est meilleure que l'alternative, qui serait un utilisateur de votre bibliothèque appelant une fonction et se demandant pourquoi rien ne semblait se produire. Bien sûr, il est encore assez mauvais d'avoir cette exception dans une bibliothèque livrée mais mieux que les échecs silencieux, IMO.
la source
Je pense que c'est une bonne pratique. L'alternative consiste à propager une valeur ou un état non valide, ce qui va affecter à la fois le code de test et de production.
la source
J'utilise toujours
NotImplementedException
- c'est à ça qu'il sert , après tout.Cela est lié au concept de «échec rapide»: si votre code lève une exception, cela devrait être détecté avant de passer en production. S'il parvient à la production, le client sait au moins que l'assemblage est incorrect .
Si le code renvoie une valeur vide de sens ou, pour les
void
méthodes, ne prend aucune mesure, les consommateurs de votre code peuvent raisonnablement penser que l'appel était significatif alors qu'il ne l'était pas. Ensuite, plus tard, lorsqu'ils obtiennent du code correct, leur code peut se casser car cela dépend de l'ancien comportement incorrect.la source
De quel genre de projet s'agit-il? Au travail ou à la maison? À la maison, faites ce que vous voulez - ce qui vous rappelle le mieux que vous devez terminer tout ce sur quoi vous travaillez.
Au travail, finissez de l'écrire.
Je ne peux pas voir une situation où j'archiverais du code qui peut / cassera d'autres développeurs, QA ou une build.
la source
Je fais les deux I mais un \ todo dans mon autodocage doxygene, puis je lance l'exception. De cette façon, si les gens ne peuvent pas être dérangés par RTFM au moins, ils seront en mesure de comprendre pourquoi leur programme a planté, au lieu de se demander pourquoi il existe une fonction déclarée qui ne renvoie pas de valeur logique.
la source