Friday, June 15, 2007

Practicas de programacion: Nunca digas nunca

Recientemente Jan Bannister escribio este post Bool considerado dañino, donde escribe (traducido):

Nunca uses Bool, o mas especificamente nunca uses bool como parametro. Es el tipo de dato mas tonto y que provee la menos informacion posible.

Pues bien, podria debatir el post de varias maneras, pero lo que me llego fue eso de "nunca uses bool como parametro"; los problemas mas grandes con eso que veo son:

  •  Tus proyectos terminarian con cientos de enums para reemplazar los parametros buleanos (asi se escribe booleans?).
  • Donde pones todos esos enums?
  • En algun punto del proyecto, tendrias tantos enums que tal vez algunos de ellos estarian duplicados, y se te haria un desorden para saber si debes aumentarle a un enum, o crear uno nuevo.

Entonces que hacemos? de alguna manera el tipo bool si es dañino, pero no siempre, yo creo que esa es la clave, puedo pensar rapidamente en al menos 3 escenarios donde no necesariamente necesitas reemplazar tus bools con enums:

  • metodos privados: se supone que son usados solamente por clase misma... y que el metodo no es tan grande, y que la clase no es tan grande, y que tienes comentarios verdad?
  • metodos con un solo parametro que solo es algo que prendes o apagas, por ejemplo PonerVisibilidad(true);
  • Aun en metodos con varios parametros tambien se puede usar con variables con nombres claros que indiquen su proposito y no se presten a confusion, hay muchos ejemplos de esos, pero si eviten llamar sus variables, x, i, j, k, etc... porque entonces no importa si el parametro es bool o no, el codigo sera mas dificil de entender

y bien, ya no suena tan mal, a final de cuentas, nunca digas nunca, no abuses de ninguna tecnica.

1 comment:

Patrick MacKAY said...

A mi juicio, el autor se deschavetó totalmente. ¿Como vamos a andar definiendo enums por todo lados?

Además, pensemos en el desarrollador y que debe elegir entre:

Si quiero invertir, uso MessageInvertion.Invert
¿y si no?
MessageInvertion.NoInvert
o puede ser
MessageInvertion.Original
o tambien
MessageInvertion.Normal
o incluso
MessageInvertion.Undefined
¿por que nó?

Me identifico plenamente con el siguiente comentario:

Dude! what the crap. Why would you say that bools are bad? Foolish? That makes no sense. So the least foolsih would be to add the enums everywhere?