Huele porque es probable que haya muchos casos en los que podría editarse o mejorarse.
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 - XXXIII) aquí .
Continuemos...
Error fatal: error no detectado: clase 'logs_queries_web' no encontrada en /var/www/html/query-line.php:78
Rastreo de pila: #0 {main} lanzado en /var/www/html/query-line.php en la línea 718
TL; DR: Atrapa tus errores. Incluso los que no esperas.
Utilice un controlador de nivel superior.
Evite idiomas que favorezcan los códigos de retorno .
Espere errores de base de datos y de bajo nivel.
Incluso en 2022, podemos ver sitios web "serios" que muestran a los usuarios ocasionales un mensaje de pila o depuración.
<? 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 pruebas de mutación para simular problemas y ver si se manejan correctamente.
Tenemos que seguir madurando.
Nuestras soluciones no deben ser descuidadas.
Necesitamos mejorar nuestra reputación como ingenieros de software serios.
Code Smell 72 - Códigos de retorno
Code Smells es solo mi opinión .
Foto de jesse orrico en Unsplash
El 80 por ciento de mis problemas son simples errores lógicos. El 80 por ciento de los problemas restantes son errores de puntero. Los problemas restantes son difíciles.
marca donner
Grandes citas de ingeniería de software
Hashing garantiza que dos objetos son diferentes. No es que sean iguales.
TL; DR: si verifica el hash, también debe verificar la igualdad
El 7 de octubre de 2022, una de las cadenas de bloques más grandes tuvo que detenerse.
Esta noticia fue impactante ya que la mayoría de las cadenas de bloques están descentralizadas por definición.
Puedes leer un artículo completo aquí:
Cómo un pirata informático robó $ 566 millones de dólares explotando un olor 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 }
Muchos linters tienen reglas para la redefinición de hash y de igualdad.
Con las pruebas de mutación, podemos sembrar diferentes objetos con el mismo hash y verificar nuestras pruebas.
Toda mejora del rendimiento tiene sus inconvenientes.
Los cachés y las replicaciones son ejemplos notables.
Podemos (debemos) usarlos con cuidado.
Code Smell 150 - Comparación igual
Code Smells es solo mi opinión .
Esto sorprenderá a algunos de sus lectores, pero mi principal interés no es la seguridad informática. Estoy principalmente interesado en escribir software que funcione según lo previsto.
Wietse Venema
Grandes citas de ingeniería de software
Tenemos que hacer algunos cambios. Tenemos que tener claro por qué
TL; DR: sea declarativo en sus decisiones de diseño o implementación.
A veces encontramos reglas arbitrarias que no son tan fácilmente comprobables.
Si no podemos escribir una prueba fallida, necesitamos tener una función con un nombre excelente y declarativo en lugar de un comentario.
// We need to run this process with more memory set_memory("512k) run_process();
increase_memory_to_avoid_false_positives(); run_process();
Este es un olor semántico.
Podemos detectar comentarios y avisarnos.
El código es prosa. Y las decisiones de diseño deben ser narrativas.
Code Smell 05 - Abusadores de comentarios
Code Smell 75 - Comentarios dentro de un método
Code Smells es solo mi opinión .
Foto de Goh Rhy Yan en Unsplash
Los programas, como las personas, envejecen. No podemos prevenir el envejecimiento, pero podemos comprender sus causas, limitar sus efectos y revertir parte del daño.
mario fusco
Grandes citas de ingeniería de software
No hagas dos o más cosas a la vez.
TL; DR: Trate de ser lo más atómico posible en sus métodos
https://maximilianocontieri.com/refactoring-002-metodo-extraccion
Si nombra un método con 'Y', probablemente esté perdiendo una oportunidad de método de extracción y ruptura.
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
Algunos linters pueden advertirnos sobre métodos que incluyen el término 'y'.
A la hora de crear métodos, es muy importante jugar a la historia del patito de goma y decirnos a nosotros mismos si estamos haciendo las cosas bien.
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
Code Smells es solo mi opinión .
Foto de Scott Sanker en Unsplash
Aprender el arte de la programación, como la mayoría de las otras disciplinas, consiste en aprender primero las reglas y luego aprender cuándo romperlas.
Josué Bloch
El desarrollo es genial. la refactorización es increíble. No lo hagas al mismo tiempo
TL; DR: No cambie funcionalmente y refactorice al mismo tiempo.
A veces detectamos que se necesita una refactorización para un mayor desarrollo.
Somos expertos en aprender.
Deberíamos poner nuestra solución en espera. Trabaje en la refactorización y continúe con nuestra solución.
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 es un olor de refactorización.
Deberíamos usar un token físico.
O estamos en la etapa de refactorización o en la etapa de desarrollo.
Code Smells es solo mi opinión .
Foto de Dannie Jing en Unsplash
Cuando estoy estudiando código, la refactorización me lleva a niveles más altos de comprensión que de otro modo me perdería. Aquellos que descartan la refactorización por comprensión como un jugueteo inútil con el código no se dan cuenta de que nunca ven las oportunidades ocultas detrás de la confusión.
Martín Cazador
Próximamente llegarán 5 olores de código más...