paint-brush
Cómo encontrar las partes apestosas de su código [Parte XX]: ¡Hemos llegado a 100!por@mcsee
1,431 lecturas
1,431 lecturas

Cómo encontrar las partes apestosas de su código [Parte XX]: ¡Hemos llegado a 100!

por Maximiliano Contieri1m2022/06/11
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

¡Comprenda los olores del código con ejemplos!

Company Mentioned

Mention Thumbnail
featured image - Cómo encontrar las partes apestosas de su código [Parte XX]: ¡Hemos llegado a 100!
Maximiliano Contieri HackerNoon profile picture

20 historias con 5 olores de código cada una son 100 olores de código, ¿verdad?


Olores de código anteriores

Continuemos...


Code Smell 96 - Mis objetos

No posees objetos.

TL; DR: no use mi como prefijo de nombre.

Problemas

  • falta de contexto
  • Falla de biyección

Soluciones

  1. Eliminar mi prefijo.
  2. Cambie a un rol que sugiera un nombre.

Contexto

Varios tutoriales antiguos usan la palabra 'mi' como un nombre perezoso. Esto es vago y conduce a errores de contexto.

Código de muestra

Equivocado

 MainWindow myWindow = Application.Current.MainWindow as MainWindow;

Derecha

 MainWindow salesWindow = Application.Current.MainWindow as MainWindow; /* Since window is instanciated, we are currently working with a specialized window playing a special role */

Detección

  • [x] Automático

Podemos decirle a nuestros linters y verificadores estáticos que busquen este prefijo y nos adviertan.

Etiquetas

  • Denominación

Conclusión

Evite usar mi . Los objetos cambian según el contexto de uso.

Más información

Créditos

Foto de Michał Bożek en Unsplash


Pensando en mi experiencia de modificar código, veo que paso mucho más tiempo leyendo el código existente que escribiendo código nuevo. Si quiero que mi código sea barato, por lo tanto, debería hacerlo fácil de leer.

Kent Beck

Grandes citas de ingeniería de software


Code Smell 97 - Mensajes de error sin empatía

Debemos tener especial cuidado con las descripciones de errores para los usuarios (y para nosotros mismos).

TL; DR: use descripciones significativas y sugiera acciones correctivas.

Problemas

  • El principio de la menor sorpresa

Soluciones

  1. Usar mensajes de error declarativos
  2. Mostrar acciones de salida claras

Contexto

Los programadores rara vez son expertos en UX.

También subestimamos el hecho de que podemos estar en ambos lados del mostrador.

Código de muestra

Equivocado

 alert("Cancel the appointment?", "Yes", "No"); // No consequences // Options not clear

Derecha

 alert("Cancel the appointment? \n" + "You will lose all the history", "Cancel Appointment", "Keep Editing"); // Consequences are clear // Choice options have context

Detección

  • [x] manuales

Necesitamos leer todos los mensajes de excepción en las revisiones de código.

Etiquetas

  • Excepciones
  • experiencia de usuario

Conclusión

Necesitamos pensar en nuestros usuarios finales al generar una excepción o mostrar mensajes.

Créditos

Foto de visuales en Unsplash


Si bien es un hecho conocido que los programadores nunca cometen errores, sigue siendo una buena idea complacer a los usuarios comprobando los errores en los puntos críticos de su programa.

Roberto D. Schneider



Code Smell 98 - Errores de ortografía

La ortografía y la legibilidad son muy importantes para los humanos y no importantes para las máquinas.

TL;DR: Cuida tus nombres.

Problemas

  • Legibilidad
  • Más difícil de buscar términos en el código.

Soluciones

  1. Revisa la ortografía de tu código.
  2. Usa un IDE con corrector ortográfico

Contexto

Muchos de nosotros no hablamos inglés como nuestro primer idioma.

Necesitamos tener especial cuidado con nuestros textos y nombres.

Este artículo tiene un error tipográfico en su título como prueba de contexto y también un clickbait 😀

Código de muestra

Equivocado

 comboFeededBySupplyer = supplyer.providers();

Derecha

 comboFedBySupplier = supplier.providers();

Detección

Etiquetas

  • Legibilidad
  • Denominación
  • Estilo de código

Conclusión

Preste mucha atención a sus nombres.

Probablemente serás la persona que lea el código en unos meses.

Relaciones

Code Smell 48 - Código sin estándares

Más información

¿Qué es exactamente un nombre? Parte I La Búsqueda

¿Qué es exactamente un nombre? Parte II Rehabilitación

Créditos

Foto de Brett Jordan en Unsplash


Dentro de cada programa grande bien escrito hay un pequeño programa bien escrito.

COCHE Hoare


Código Olfato 99 - Primero Segundo

¿Cuántas veces vemos nombres de argumentos perezosos?

TL; DR: nombre sus argumentos según el rol y no la posición accidental

Problemas

  • Legibilidad
  • Nombres que revelan la intención

Soluciones

  1. Usa nombres significativos

Contexto

Cuando escribimos métodos, generalmente no nos detenemos para encontrar nombres decentes.

Nunca refactorizamos lo obvio, tampoco.

Código de muestra

Equivocado

 class Calculator: def subtract(self, first, second): return first - second class CalculatorTest def test_multiply(): assert equals(first, second)

Derecha

 class Calculator: def subtract(self, minuend, subtrahend): return minuend - subtrahend class CalculatorTest def test_multiply(): assert equals(expectedValue, realValue)

Detección

  • [x] manuales

Podemos advertir sobre palabras prohibidas como 'primero' y 'segundo' como nombres de argumentos.

Etiquetas

  • Legibilidad

Conclusión

Siempre siga la regla que sugiere el parámetro.

Nombra a tus colaboradores según el rol.

Relaciones

Code Smell 65 - Variables nombradas según tipos

Más información

¿Qué es exactamente un nombre? Parte II Rehabilitación

Créditos

Foto de Priscilla Du Preez en Unsplash


El código fuente final es el diseño de software real.

jack reeves


Código Olfato 100 - Ir a

GOTO fue considerado dañino hace 50 años

TL; DR: Nunca uses GoTo.

Problemas

  • Legibilidad
  • Código difícil de seguir

Soluciones

  1. Reemplace GOTO con código estructurado
  2. Usar excepciones

Contexto

Empecé a programar en Basic.

GOTO fue fuertemente abusado allí.

Tuve que aprender programación estructurada desde cero en modo Rehab.

Código de muestra

Equivocado

 for x < 0 { if x > -1e-09 { goto small } z = z / x x = x + 1 } for x < 2 { if x < 1e-09 { goto small } z = z / x x = x + 1 } if x == 2 { return z } x = x - 2 p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6] q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7] return z * p / q small: if x == 0 { return Inf(1) } return z / ((1 + Euler*x) * x) }

Derecha

 for x < 0 { if x > -1e-09 { return small(x, z) } z = z / x x = x + 1 } for x < 2 { if x < 1e-09 { return small(x, z) } z = z / x x = x + 1 } if x == 2 { return z } x = x - 2 p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6] q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7] return z * p / q small(x, z) { if x == 0 { return Inf(1) } return z / ((1 + Euler*x) * x) } }

Detección

  • [x] Automático

En idiomas compatibles con GOTO , nuestros linters pueden advertirnos contra su uso.

Etiquetas

  • Legibilidad

Conclusión

Reconocimos los problemas de GOTO hace unas décadas.

El problema sigue presente en lenguajes modernos como GoLang, PHP, Perl, etc.

La mayoría de los programadores afortunadamente evitan la sentencia GOTO. El próximo objetivo será considerar el uso nulo dañino.


Cortesía XKCD

Relaciones

Código Olor 12 - Nulo

Más información

Créditos

Foto de Jens Johnsson en Unsplash


Es prácticamente imposible enseñar buena programación a estudiantes que han tenido una exposición previa a BASIC: como programadores potenciales, están mentalmente mutilados sin esperanza de regeneración.

Edsger Dijkstra

Grandes citas de ingeniería de software


Y eso es todo por ahora, hemos alcanzado el hito 100.


¡El próximo artículo explicará 5 olores de código más!