La mayoría de estos olores son solo indicios de algo que podría estar mal. Por lo tanto, no es necesario que se arreglen per se... (Sin embargo, debe investigarlo).
Puedes encontrar todos los olores del código anterior (Parte i - XXXI) aquí .
Aprendemos if/else en nuestro primer día de programación. Entonces nos olvidamos de lo demás.
TL; DR: Sea explícito. Incluso con Else.
Luego, eliminamos el IF y usamos polimorfismo.
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); }
Este tipo de olor genera mucho debate público y odio .
Código Olor 102 - Código de flecha
Code Smell 36 - Declaraciones Switch/case/else if/else/if
Cómo deshacerse de los IF molestos para siempre
El mayor problema de los equipos de software es asegurarse de que todos entiendan lo que hacen los demás.
Martín Cazador
Hoy, esperaba un pago en mi billetera. El saldo era 0. Entré en pánico.
TL;DR: nulo no es 0. El error no es 0. solo 0 es 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")
Podemos encontrar patrones cuando se lanza una excepción o un código de retorno y se enmascara con un 0.
Code Smell 139 - Código comercial en la interfaz de usuario
Code Smell 73 - Excepciones para casos esperados
Code Smell 72 - Códigos de retorno
Null: El error del billón de dólares
Code Smells es solo mi opinión .
Mi verdadera crítica con Null es que trae de vuelta innecesariamente toda la agonía de tener que elegir si ejecutar su programa rápido sin verificar o hacerlo lento con verificación.
Tony Hoare (Inventor nulo)
Grandes citas de ingeniería de software
Asignas un valor a una variable y lo usas pero nunca lo cambias.
TL; DR: sea declarativo sobre la mutabilidad.
Refactorización 003 - Extraer constante
A veces suponemos que un valor puede cambiar con el MAPPER .
Esto también evitará Magic Constants .
<?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
Debemos desafiarnos a nosotros mismos y refactorizar cuando el alcance de la variable sea claro y aprendamos más sobre sus propiedades y mutabilidad .
Code Smell 116 - Variables declaradas con 'var'
Code Smell 127 - Constantes mutables
Code Smell 107 - Reutilización de variables
Code Smell 02 - Constantes y números mágicos
El poder maligno de los mutantes
Code Smells es solo mi opinión .
Invariablemente se descubre que un sistema complejo que funciona ha evolucionado a partir de un sistema simple que funcionó.
Juan Gallo
El desarrollo serio es realizado por muchas personas diferentes. Tenemos que empezar a ponernos de acuerdo.
TL; DR: no mezcle diferentes conversiones de casos
{ "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 }
Podemos informar a nuestros linters sobre los amplios estándares de nombres de nuestra empresa y hacerlos cumplir.
Code Smell 48 - Código sin estándares
Qué es exactamente un nombre - Parte I La Búsqueda
Code Smells es solo mi opinión .
Si tiene demasiados casos especiales, lo está haciendo mal.
craig cerouni
Maxint es un muy buen número para una identificación inválida. Nunca lo alcanzaremos.
TL;DR: No combine identificaciones reales con identificaciones no válidas. De hecho: Evite las identificaciones.
Entonces inventamos El error de los mil millones de dólares .
#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 - Identificaciones secuenciales
Null: El error del billón de dólares
Y2K22 - El error que nos avergüenza
Code Smells es solo mi opinión .
Los insectos acechan en las esquinas y se congregan en los límites.
Boris Beizer