miércoles, 5 de noviembre de 2014

Etiquetado como:

La importancia de NO reinventar la rueda... Reto de programación #2

C# y Programación
Artículo para: Programadores de C# de cualquier nivel




Hace unos días me encontré con un código muy similar al que arriba podéis ver... Supongo que sería por el agotamiento del que últimamente sufro, o porque no esperaba semejante maquiavélica creación, pero el hecho es que tardé unos segundos (de hecho bastantes) en entender qué demonios hacía esto.

Tras un concienzudo análisis deduje que el objetivo final que perseguía su creador no era más que hacer que un objeto DateTime que provenía de la fecha actual traída con el utilísimo DateTime.Now se convirtiera en un string para pintarlo en pantalla.

No entro a debatir de la calidad profesional de la persona que inventó semejante monstruosidad, no me interesa quejarme de gratis máxime teniendo en cuenta que TODOS (yo el primero) la cagamos alguna vez en esta profesión; pero lo que sí quiero decir es que si navegamos 3 segundos por internet nos damos cuenta que esta no es ni de lejos la manera más óptima. 

Mis razones, aunque habrá millones más son las siguientes:
  1. Cada llamada a DateTime.Now tiene un sobrecoste totalmente inútil y absurdo, además, de la primera llamada a la última aunque sea pequeña, habrá una diferencia horaria por motivos obvios (en cada llamada la foto es diferente aunque difiera en milisegundos, solo hay que conocer la propiedad Now).
  2. El operador de concatenación ("+") es brutalmente lento y desaconsejable para una concatenación tan extensa, para eso existe StringBuilder (uno de los consejos del curso oficial de Microsoft que recientemente he hecho).
  3. Este código no es para nada legible. Insisto, mi experiencia de más de 9 años no me ha permitido entenderlo hasta un análisis concienzudo, así que imagino un chavalejo que se encuentre por primera vez luchando con un dragón como éste. Nuestro código ha de ser lo más entendible posible.


La mejor manera es la siguiente sin duda, aunque muchos ya habréis llegado a ella hace un buen rato:


Nótese que ambas hacen EXACTAMENTE LO MISMO, pero la segunda es infinitamente más rápida que la primera. Esto significa que en una aplicación de alto rendimiento, si no tenemos en cuenta cosas tan básicas como ésta, es muy posible que los tiempos de respuesta sean penalizados terriblemente.

Por eso insisto, no reinventemos la rueda que no es necesario. El principio del programador vago, que explicaré en otro artículo posterior, tiene que ser lo que rija nuestro día a día... si hacemos "ciencia" o más bien, "brujería" como ésta lo más probable es que alguien pase con la excavadora y elimine nuestro código.

Quisiera comentarios y otras vivencias similares vuestras...

Enrique Díaz

Author y editor

0 comentarios:

Publicar un comentario

 

Webs amigas:

  • En tu email...

    Suscríbete aquí a nuestro newsletter y nunca más te perderás nuestras actualizaciones

    Copyright © Los vericuetos .NET 2015
    Distributed By My Blogger Themes | Designed By Templateism