Cheira porque provavelmente há muitos casos em que poderia ser editado ou melhorado.
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 - XXXIII) aqui .
Vamos continuar...
Erro fatal: Erro não detectado: Classe 'logs_queries_web' não encontrada em /var/www/html/query-line.php:78
Rastreamento de pilha: #0 {main} lançado em /var/www/html/query-line.php na linha 718
TL;DR: Pegue seus erros. Mesmo aqueles que você não espera.
Use um manipulador de nível superior.
Evite idiomas que favoreçam códigos de retorno .
Espere erros de banco de dados e de baixo nível.
Mesmo em 2022, podemos ver sites "sérios" mostrando aos usuários casuais uma pilha ou mensagem de depuração.
<? 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");
Podemos usar o teste de mutação para simular problemas e ver se eles são tratados corretamente.
Precisamos continuar amadurecendo.
Nossas soluções não devem ser desleixadas.
Precisamos melhorar nossa reputação como engenheiros de software sérios.
Code Smell 72 - Códigos de Retorno
Code Smells são apenas minha opinião .
Foto de Jesse Orrico no Unsplash
80 por cento dos meus problemas são simples erros de lógica. 80 por cento dos problemas restantes são erros de ponteiro. Os problemas restantes são difíceis.
Mark Donner
Grandes Citações de Engenharia de Software
Hashing garante que dois objetos sejam diferentes. Não que sejam iguais.
TL;DR: Se você verificar o hash, também deverá verificar a igualdade
Em 7 de outubro de 2022, um dos maiores blockchains teve que ser interrompido.
Esta notícia foi chocante, já que a maioria das blockchains são descentralizadas por definição.
Você pode ler um artigo completo aqui:
Como um hacker roubou US$ 566 milhões explorando um cheiro de código
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 }
Muitos linters têm regras para redefinição de hash e igualdade.
Com o teste de mutação, podemos semear diferentes objetos com o mesmo hash e verificar nossos testes.
Cada melhoria de desempenho tem suas desvantagens.
Caches e replicações são exemplos notáveis.
Podemos (devemos) usá-los com cuidado.
Code Smell 150 - Comparação Igual
Code Smells são apenas minha opinião .
Isso vai surpreender alguns de seus leitores, mas meu interesse principal não é a segurança do computador. Estou interessado principalmente em escrever software que funcione como pretendido.
Wietse Venema
Grandes Citações de Engenharia de Software
Precisamos fazer algumas mudanças. Precisamos ser claros sobre o porquê
TL;DR: Seja declarativo em suas decisões de design ou implementação.
Às vezes, encontramos regras arbitrárias não tão facilmente testáveis.
Se não podemos escrever um teste com falha, precisamos ter uma função com um nome excelente e declarativo em vez de um comentário.
// We need to run this process with more memory set_memory("512k) run_process();
increase_memory_to_avoid_false_positives(); run_process();
Este é um cheiro semântico.
Podemos detectar comentários e nos avisar.
Código é prosa. E as decisões de design devem ser narrativas.
Code Smell 05 - Abusadores de comentários
Code Smell 75 - Comentários dentro de um método
Code Smells são apenas minha opinião .
Foto de Goh Rhy Yan no Unsplash
Os programas, como as pessoas, envelhecem. Não podemos prevenir o envelhecimento, mas podemos entender suas causas, limitar seus efeitos e reverter alguns dos danos.
Mário Fusco
Grandes Citações de Engenharia de Software
Não faça duas ou mais coisas ao mesmo tempo.
TL;DR: Tente ser o mais atômico possível em seus métodos
https://maximilianocontieri.com/refactoring-002-extract-method
Se você nomear um método com 'E', provavelmente está perdendo uma oportunidade de extrair e quebrar o método.
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
Alguns linters podem nos alertar sobre métodos, incluindo o termo 'e'.
Ao fazer métodos, é muito importante jogar alguma história de pato de borracha e dizer a nós mesmos se estamos fazendo as coisas certas.
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
Code Smells são apenas minha opinião .
Foto de Scott Sanker no Unsplash
Aprender a arte da programação, como a maioria das outras disciplinas, consiste primeiro em aprender as regras e depois aprender quando quebrá-las.
Joshua Bloch
Desenvolver é ótimo. a refatoração é incrível. Não faça isso ao mesmo tempo
TL;DR: Não altere funcionalmente e refatore ao mesmo tempo.
Às vezes, detectamos que uma refatoração é necessária para um maior desenvolvimento.
Somos especialistas em aprender.
Devemos colocar nossa solução em espera. Trabalhe na refatoração e continue com nossa solução.
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
Este é um cheiro de refatoração.
Devemos usar um token físico.
Ou estamos no estágio de refatoração ou no estágio de desenvolvimento.
Code Smells são apenas minha opinião .
Foto de Dannie Jing no Unsplash
Quando estou estudando código, a refatoração me leva a níveis mais altos de compreensão que, de outra forma, perderia. Aqueles que descartam a refatoração de compreensão como uma manipulação inútil do código não percebem que nunca veem as oportunidades escondidas por trás da confusão.
Martin Fowler
Mais 5 cheiros de código estão chegando em breve…