A maioria desses cheiros são apenas indícios de algo que pode estar errado. Portanto, eles não precisam ser consertados per se... (Você deve dar uma olhada nisso, no entanto.)
Você pode encontrar todos os cheiros de código anteriores (Parte i - XXXI) aqui .
Aprendemos if/else em nosso primeiro dia de programação. Então esquecemos o resto.
TL;DR: Seja explícito. Mesmo com Else.
Depois, removemos o IF e usamos o 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); }
Esse tipo de cheiro traz muito debate público e ódio .
Cheiro de Código 102 - Código de Seta
Code Smell 36 - Switch/case/else if/else/if declarações
Como se livrar de IFs irritantes para sempre
O maior problema nas equipes de software é garantir que todos entendam o que todos estão fazendo.
Martin Fowler
Hoje, esperava um pagamento em minha carteira. O saldo era 0. Entrei em pânico.
TL;DR: Nulo não é 0. O erro não é 0. Apenas 0 é 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 padrões quando uma exceção ou código de retorno é lançado e mascarado com um 0.
Code Smell 139 - Código comercial na interface do usuário
Code Smell 73 - Exceções para casos esperados
Code Smell 72 - Códigos de Retorno
Nulo: O erro de um bilhão de dólares
Code Smells são apenas minha opinião .
Minha crítica real com Null é que ele traz de volta desnecessariamente toda a agonia de ter que escolher se deseja executar seu programa rapidamente sem verificar ou executá-lo lentamente com verificação.
Tony Hoare (Inventor Nulo)
Grandes Citações de Engenharia de Software
Você atribui um valor a uma variável e o usa, mas nunca o altera.
TL;DR: Seja declarativo sobre a mutabilidade.
Refatoração 003 - Extrair Constante
Às vezes pensamos que um valor pode mudar com o MAPPER .
Isso também 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
Devemos nos desafiar e refatorar quando o escopo da variável estiver claro e aprendermos mais sobre suas propriedades e mutabilidade .
Code Smell 116 - Variáveis declaradas com 'var'
Code Smell 127 - Constantes Mutáveis
Code Smell 107 - Reutilização de Variáveis
Code Smell 02 - Constantes e Números Mágicos
Code Smells são apenas minha opinião .
Um sistema complexo que funciona invariavelmente evoluiu de um sistema simples que funcionou.
John Gall
O desenvolvimento sério é feito por muitas pessoas diferentes. Temos que começar a concordar.
TL;DR: Não misture diferentes conversões de maiúsculas e minúsculas
{ "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 nossos linters sobre os amplos padrões de nomenclatura de nossa empresa e aplicá-los.
Code Smell 48 - Código Sem Padrões
O que exatamente é um nome - Parte I The Quest
Code Smells são apenas minha opinião .
Se você tem muitos casos especiais, está fazendo errado.
Craig Zerouni
Maxint é um número muito bom para um ID inválido. Jamais o alcançaremos.
TL;DR: Não combine IDs reais com inválidos. Na verdade: Evite IDs.
Então inventamos O erro de um bilhão 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)
Cheiro de código 120 - IDs sequenciais
Nulo: O erro de um bilhão de dólares
Y2K22 - O erro que nos envergonha
Code Smells são apenas minha opinião .
Insetos espreitam nos cantos e se reúnem nos limites.
Boris Beizer