¡Huele a código infinito!
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. No son obligatorios fijos per se... (Deberías investigarlo).
People Mentioned
Companies Mentioned
Coin Mentioned
Foto de en
¡Código infinito, huele!
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. No son obligatorios fijos per se... (Deberías investigarlo).
var fs = require('fs'); function logTextWasAdded(err) { if(err) return console.log(err); console.log('Information added'); }; function addData(error, actualText) { if (error) return console.log(error); actualText = actualText + '\n' + 'Add data'; fs.writeFile(fileWithData, actualText, logTextWasAdded); } var fileWithData = 'hello.world'; fs.readFile(fileWithData, 'utf8', addData);
Detección
Este problema brilla a simple vista. Muchos linters pueden detectar esta complejidad y advertirnos.
Etiquetas
Legibilidad
Complejidad
Conclusión
Callback Hell es un problema muy común en los lenguajes de programación con futuros o promesas. Las devoluciones de llamada se agregan de forma incremental. No hay mucho desorden al principio. La complejidad sin refactorización los hace difíciles de leer y depurar.
Hay dos formas de escribir código: escribir código tan simple que obviamente no tiene errores, o escribir código tan complejo que no tiene errores obvios.
tony hoare
Código olor 79 - El resultado
Si ya se usa un nombre, siempre podemos prefijarlo con 'the'.
TL; DR: no anteponga sus variables.
Problemas
Legibilidad
nombres sin sentido
Soluciones
Usa nombres reveladores de intenciones.
Evite las palabras ruidosas indistintas .
Código de muestra
Equivocado
var result; result = getSomeResult(); var theResult; theResult = getSomeResult();
Derecha
var averageSalary; averageSalary = calculateAverageSalary(); //.. var averageSalaryWithRaises; averageSalaryWithRaises = calculateAverageSalary();
Detección
Al igual que con muchas de nuestras convenciones de nomenclatura, podemos indicar a nuestros linters que prohíban nombres como theXxx... .
Etiquetas
Legibilidad
Conclusión
Utilice siempre nombres que revelen la intención. Si sus nombres chocan, use nombres locales, extraiga sus métodos y evite los prefijos 'the'.
Foto de en Una diferencia entre un programador inteligente y un programador profesional es que el profesional entiende que la claridad es el rey. Los profesionales usan sus poderes para el bien y escriben código que otros pueden entender.
Roberto C. Martín
Code Smell 80 - Prueba/captura anidada
Las excepciones son una excelente manera de separar el camino feliz del camino problemático. Pero tendemos a complicar demasiado nuestras soluciones.
TL;DR: No anidar Excepciones. A nadie le importa lo que hagas en los bloques interiores.
Problemas
Legibilidad
Soluciones
refactorizar
Código de muestra
Equivocado
try { transaction.commit(); } catch (e) { logerror(e); if (e instanceOf DBError){ try { transaction.rollback(); } catch (e) { doMoreLoggingRollbackFailed(e); } } } //Nested Try catchs //Exception cases are //more important than happy path //We use exceptions as control flow
Derecha
try { transaction.commit(); } catch (transactionError) { this.withTransactionErrorDo( transationError, transaction); } //transaction error policy is not defined in this function //so we don't have repeated code //code is more readable //It is up to the transaction //and the error to decide what to do
Detección
Podemos detectar este olor utilizando árboles de análisis.
Etiquetas
Excepciones
Conclusión
No abuse de las excepciones, no cree clases de excepción que nadie detectará nunca y no esté preparado para todos los casos (a menos que tenga un buen escenario real con una prueba de cobertura). El camino feliz siempre debe ser más importante que los casos de excepción.
Escribir software como si fuéramos la única persona que tiene que comprenderlo es uno de los mayores errores y suposiciones falsas que se pueden cometer.
Carolina Szczur
Y eso es todo por ahora… ¡El próximo artículo explicará 5 olores de código más!