Ça sent mauvais parce qu'il y a probablement de nombreux cas où il pourrait être modifié ou amélioré.
La plupart de ces odeurs ne sont que des indices de quelque chose qui pourrait ne pas fonctionner. Par conséquent, ils ne sont pas tenus d'être corrigés en soi… (Vous devriez cependant y jeter un coup d'œil.)
Vous pouvez trouver toutes les odeurs de code précédentes (Partie I - XXXIII) ici .
Nous allons continuer...
Erreur fatale : Erreur non détectée : la classe 'logs_queries_web' est introuvable dans /var/www/html/query-line.php:78
Trace de la pile : #0 {main} lancé dans /var/www/html/query-line.php à la ligne 718
TL;DR : Attrapez vos erreurs. Même ceux auxquels vous ne vous attendez pas.
Utilisez un gestionnaire de niveau supérieur.
Évitez les langages favorisant les codes de retour .
Attendez-vous à des erreurs de base de données et de bas niveau.
Même en 2022, nous pouvons voir des sites Web "sérieux" montrant aux utilisateurs occasionnels une pile ou un message de débogage.
<? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9
<? // A user-defined exception handler function function myException($exception) { logError($exception->description()) // We don't show Exception to final users } // Set user-defined exception handler function set_exception_handler("myException");
Nous pouvons utiliser des tests de mutation pour simuler des problèmes et voir s'ils sont traités correctement.
Nous devons continuer à mûrir.
Nos solutions ne doivent pas être bâclées.
Nous devons améliorer notre réputation d'ingénieurs logiciels sérieux.
Code Odeur 72 - Codes de retour
Code Smells n'est que mon avis .
Photo de Jesse Orrico sur Unsplash
80 % de mes problèmes sont de simples erreurs de logique. 80 % des problèmes restants sont des erreurs de pointeur. Les problèmes restants sont difficiles.
Marc Donner
Excellentes citations de génie logiciel
Le hachage garantit que deux objets sont différents. Non pas qu'ils soient pareils.
TL; DR : si vous vérifiez le hachage, vous devez également vérifier l'égalité
Le 7 octobre 2022, l'une des plus grandes chaînes de blocs a dû être arrêtée.
Cette nouvelle était choquante puisque la plupart des blockchains sont décentralisées par définition.
Vous pouvez lire un article complet ici:
Comment un hacker a volé 566 millions de dollars en exploitant une odeur de code
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return (int)(Math.random()*256); } // This is just an example of non-correlation // When using HashMaps we can make a mistake // and guess the object is not present in the collection }
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return name.hashCode(); } // This is just an example of non-correlation }
De nombreux linters ont des règles pour le hachage et la redéfinition de l'égalité.
Avec les tests de mutation, nous pouvons ensemencer différents objets avec le même hachage et vérifier nos tests.
Chaque amélioration des performances a ses inconvénients.
Les caches et les réplications en sont des exemples notables.
On peut (doit) les utiliser avec précaution.
Code Smell 150 - Comparaison égale
Code Smells n'est que mon avis .
Cela surprendra certains de vos lecteurs, mais mon intérêt premier n'est pas la sécurité informatique. Je suis principalement intéressé par l'écriture de logiciels qui fonctionnent comme prévu.
Wietse Venema
Excellentes citations de génie logiciel
Nous devons faire quelques changements. Nous devons être clairs sur pourquoi
TL;DR : Soyez déclaratif sur vos décisions de conception ou de mise en œuvre.
Parfois, nous trouvons des règles arbitraires qui ne sont pas si facilement testables.
Si nous ne pouvons pas écrire un test qui échoue, nous devons avoir une fonction avec un nom excellent et déclaratif au lieu d'un commentaire.
// We need to run this process with more memory set_memory("512k) run_process();
increase_memory_to_avoid_false_positives(); run_process();
C'est une odeur sémantique.
Nous pouvons détecter les commentaires et nous avertir.
Le code est en prose. Et les décisions de conception doivent être narratives.
Code Smell 05 - Agresseurs de commentaires
Code Smell 75 - Commentaires dans une méthode
Code Smells n'est que mon avis .
Photo de Goh Rhy Yan sur Unsplash
Les programmes, comme les gens, vieillissent. Nous ne pouvons pas empêcher le vieillissement, mais nous pouvons comprendre ses causes, limiter ses effets et inverser certains des dommages.
Mario Fusco
Excellentes citations de génie logiciel
Ne faites pas deux choses ou plus à la fois.
TL;DR : Essayez d'être aussi atomique que possible dans vos méthodes
https://maximilianocontieri.com/refactoring-002-extract-method
Si vous nommez une méthode avec 'Et', vous manquez probablement une opportunité de méthode d'extraction et de rupture.
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
Certains linters peuvent nous avertir des méthodes incluant le terme « et ».
Lors de l'élaboration de méthodes, il est très important de jouer une histoire de canard en caoutchouc et de nous dire si nous faisons les choses correctement.
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
Code Smells n'est que mon avis .
Photo de Scott Sanker sur Unsplash
Apprendre l'art de la programmation, comme la plupart des autres disciplines, consiste d'abord à apprendre les règles, puis à savoir quand les enfreindre.
Josué Bloch
Développer c'est super. le refactoring est incroyable. Ne le fais pas en même temps
TL;DR : Ne changez pas fonctionnellement et ne refactorisez pas en même temps.
Parfois, nous détectons qu'une refactorisation est nécessaire pour un développement ultérieur.
Nous sommes des experts en apprentissage.
Nous devrions mettre notre solution en attente. Travaillez sur le refactoring, et continuez avec notre solution.
getFactorial(n) { return n * getFactorial(n); } // Rename and Change factorial(n) { return n * factorial(n-1); } // This is a very small example // Things go works while dealing with huge code
getFactorial(n) { return n * getFactorial(n); } // Change getFactorial(n) { return n * getFactorial(n-1); } // Run the tests factorial(n) { return n * factorial(n-1); } // Rename
C'est une odeur de refactorisation.
Nous devrions utiliser un jeton physique.
Soit nous sommes en phase de refactoring, soit en phase de développement.
Code Smells n'est que mon avis .
Photo de Dannie Jing sur Unsplash
Lorsque j'étudie le code, la refactorisation me conduit à des niveaux de compréhension plus élevés que je manquerais autrement. Ceux qui rejettent la refactorisation de la compréhension comme une manipulation inutile du code ne réalisent pas qu'ils ne voient jamais les opportunités cachées derrière la confusion.
Martin Fowler
5 autres odeurs de code arrivent bientôt…