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 - XXXI) ici .
Nous apprenons si/sinon lors de notre premier jour de programmation. Puis on oublie le reste.
TL;DR : Soyez explicite. Même avec Else.
Ensuite, nous supprimons le SI et utilisons le polymorphisme.
function carBrandImplicit(model) { if (model === 'A4') { return 'audi'; } return 'Mercedes-Benz'; }
function carBrandExplicit(model) { if (model === 'A4') { return 'audi'; } if (model === 'AMG') { return 'Mercedes-Benz'; } // Fail Fast throw new Exception('Model not found); }
Ce genre d'odeur suscite beaucoup de débats publics et de haine .
Code Smell 36 - Switch/case/else if/else/if instructions
Comment se débarrasser des IF ennuyeux pour toujours
Le plus gros problème des équipes logicielles est de s'assurer que tout le monde comprend ce que font les autres.
Martin Fowler
Aujourd'hui, j'attendais un paiement dans mon portefeuille. Le solde était à 0. J'ai paniqué.
TL;DR : Null n'est pas 0. Error n'est pas 0. juste 0 est 0.
""" Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable show 0 as the balance """ import requests import json def get_balance(address): url = "//blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: return 0
""" Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable throw an error """ import requests import json def get_balance(address): url = "//blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: raise BlockchainNotReachableError("Error reaching blockchain")
Nous pouvons trouver des modèles lorsqu'une exception ou un code de retour est généré et masqué par un 0.
Code Smell 139 - Code commercial dans l'interface utilisateur
Code Smell 73 - Exceptions pour les cas attendus
Code Odeur 72 - Codes de retour
Null : l'erreur d'un milliard de dollars
Code Smells n'est que mon avis .
Ma vraie critique avec Null est qu'il ramène inutilement toute l'agonie d'avoir à choisir d'exécuter votre programme rapidement sans vérification ou de l'exécuter lentement avec vérification.
Tony Hoare (inventeur nul)
Excellentes citations de génie logiciel
Vous affectez une valeur à une variable et l'utilisez mais ne la modifiez jamais.
TL;DR : Soyez déclaratif sur la mutabilité.
Refactoring 003 - Extraire la constante
Parfois on devine qu'une valeur peut changer avec le MAPPER .
Cela évitera également les constantes magiques .
<?php function configureUser() { $password = '123456'; // Setting a password on a variable is another vulnerability // And Code Smell $user = new User($password); // Notice Variable doesn't change }
<?php define("USER_PASSWORD", '123456') function configureUser() { $user = new User(USER_PASSWORD); } // or function configureUser() { $user = new User(userPassword()); } function userPassword() : string { return '123456'; } // Case is an oversimplification as usual
Nous devons nous remettre en question et refactoriser lorsque la portée de la variable est claire et que nous en apprenons davantage sur ses propriétés et sa mutabilité .
Code Smell 116 - Variables déclarées avec 'var'
Code Smell 127 - Constantes Mutables
Code Smell 107 - Réutilisation des variables
Code Smell 02 - Constantes et nombres magiques
Le pouvoir maléfique des mutants
Code Smells n'est que mon avis .
Un système complexe qui fonctionne se révèle invariablement avoir évolué à partir d'un système simple qui fonctionnait.
Jean Gall
Le développement sérieux est fait par de nombreuses personnes différentes. Nous devons commencer à nous mettre d'accord.
TL ; DR : ne mélangez pas différentes conversions de casse
{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "UPDATED_AT": "2022-01-07T02:23:41.305Z", "created_at": "2019-01-07T02:23:41.305Z", "deleted at": "2022-01-07T02:23:41.305Z" }
{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "updatedAt": "2022-01-07T02:23:41.305Z", "createdAt": "2019-01-07T02:23:41.305Z", "deletedAt": "2022-01-07T02:23:41.305Z" // This doesn't mean THIS standard is the right one }
Nous pouvons informer nos linters des normes générales de dénomination de notre entreprise et les faire respecter.
Code Smell 48 - Code sans normes
Qu'est-ce qu'un nom exactement - Partie I La quête
Code Smells n'est que mon avis .
Si vous avez trop de cas particuliers, vous vous trompez.
Craig Zerouni
Maxint est un très bon nombre pour un ID invalide. Nous ne l'atteindrons jamais.
TL ; DR : Ne couplez pas les identifiants réels avec des identifiants invalides. En fait : évitez les pièces d'identité.
Puis nous avons inventé l'erreur d'un milliard de dollars .
#include "stdio.h" #include "stdlib.h" #include "stdbool.h" #define INVALID_VALUE 999 int main(void) { int id = get_value(); if (id==INVALID_VALUE) { return EXIT_FAILURE; // id is a flag and also a valid domain value } return id; } int get_value() { // something bad happened return INVALID_VALUE; } // returns EXIT_FAILURE (1)
#include "stdio.h" #include "stdlib.h" #include "stdbool.h" // No INVALID_VALUE defined int main(void) { int id; id = get_value(); if (!id) { return EXIT_FAILURE; // Sadly, C Programming Language has no exceptions } return id; } get_value() { // something bad happened return false; } // returns EXIT_FAILURE (1)
Code Smell 120 - ID séquentiels
Null : l'erreur d'un milliard de dollars
Y2K22 - L'erreur qui nous embarrasse
Code Smells n'est que mon avis .
Les insectes se cachent dans les coins et se rassemblent aux limites.
Boris Beizer