- Appels de méthode ou de fonction qui ne font rien de valeur.
Pas forcément mauvais. Les méthodes d'une classe de base appellent souvent des méthodes vides désignées comme points de substitution pour les sous-classes. Exemple: UIView de Cocoa Touch a une -didAddSubview:
méthode documentée comme ne faisant rien dans la version par défaut. La -addSubview:
méthode UIView doit appeler -didAddSubview:
même si elle ne fait rien car les sous-classes peuvent l'implémenter pour faire quelque chose. Les méthodes qui ne font rien et les raisons qui les motivent devraient bien sûr être documentées.
Si une fonction / méthode vide ou inutile est évidemment présente pour des raisons historiques, elle doit être supprimée. Jetez un coup d'œil aux versions précédentes du code de votre référentiel de code source si vous n'êtes pas sûr.
- Contrôles redondants effectués dans un fichier de classe, un objet ou une méthode distinct (e).
Difficile à dire si ça va sans contexte. Si les vérifications sont clairement effectuées pour la même raison, cela peut signifier qu'il n'y a pas de séparation claire des responsabilités et qu'il faut procéder à une refactorisation, en particulier lorsque les deux vérifications aboutissent à la même action. Si l'action résultant des deux vérifications n'est pas la même, les deux vérifications sont probablement effectuées pour des raisons différentes, même si la condition est la même, et c'est probablement correct.
- si les déclarations sont toujours considérées comme vraies.
Il y a une grande différence entre:
if (1) {
// ...
}
et:
if (foo() == true) {
// ...
}
où foo()
il arrive de toujours revenir true
.
Le premier cas se produit souvent lorsque les personnes sont en train de déboguer. Il est facile d'utiliser un if (0) {...
pour supprimer temporairement un morceau de code lorsque vous essayez d'isoler un bogue, puis changez le 0
en 1
pour restaurer ce code. Le if
doit être retiré une fois que vous avez terminé, bien sûr, mais il est facile d'oublier cette étape, ou de manquer un ou deux si vous l' avez fait en plusieurs endroits. (C’est une bonne idée d’identifier de telles conditions avec un commentaire que vous pourrez ensuite rechercher.) Le seul inconvénient est la confusion que cela pourrait causer à l’avenir; si le compilateur peut déterminer la valeur de la condition au moment de la compilation, il la supprimera entièrement.
Le deuxième cas peut être acceptable. Si la condition représentée par foo()
doit être testée à plusieurs endroits dans le code, son intégration dans une fonction ou une méthode distincte est souvent la bonne chose à faire, même si elle foo()
s'avère toujours vraie en ce moment. S'il est concevable que cela foo()
puisse éventuellement revenir false
, isoler cette condition dans une méthode ou une fonction est un moyen d'identifier tous les endroits où le code s'appuie sur cette condition. Cependant , cela crée un risque que la foo() == false
condition ne soit pas testée et puisse entraîner des problèmes plus tard; La solution consiste à ajouter des tests unitaires qui testent explicitement le false
cas.
- Des fils qui se détachent et ne font rien d’important.
Cela ressemble à un artefact de l’historique et pourrait être identifié lors d’une révision du code ou lors du profilage périodique du logiciel. Je suppose que cela pourrait être créé intentionnellement, mais j’ai du mal à imaginer que quelqu'un le fasse volontairement.
if (false) {...}
les blocs sont parfaits pour commenter le code! </