7 errores comunes que los programadores de C suelen cometer

He tenido la ocasión de impartir clases de C entre jóvenes desarrolladores, y me he dado cuenta de que ciertos errores se repiten en casi cada uno de ellos. Se trata principalmente de errores que, una vez te percatas, no los vuelves a cometer porque son fáciles de recordar. Sin embargo, sin un desarrollador no es consciente de ellos, puede causar muchos problemas en la eficiencia de la aplicación y en la calidad del software desarrollador. Es por eso que me he decidido a compilar los 7 errores más frecuentes de los programadores de C.

Concatenar cadenas en lugar de utilizar StringBuilder

La concatenación de cadenas funciona de tal manera que cada vez que se agrega algo a una cadena, se está asignando una nueva dirección en la memoria. La cadena anterior se copia en una nueva ubicación con la parte que acabas de agregar. Esto es ineficiente. Hay que recordar que existe StringBuilder, que mantiene la misma posición en la memoria sin realizar la operación de copia. Gracias a los strings añadidos por medio de StringBuilder el proceso es mucho más eficiente, sobre todo en caso de que tengas cientos de operaciones de agregación.

//INCORRECTO
List values = new List(){"Esto ","es ","Esparta ","!"};
string outputValue = string.Empty;
foreach (var value in values)
{
   outputValue += value;
}
//CORRECTO
StringBuilder outputValueBuilder = new StringBuilder();
foreach (var value in values)
{
   outputValueBuilder.Append(value);
}

LINQ – Where con First en lugar de FirstOrDefault

Muchos programadores encuentran cierto conjunto de elementos por medio de 'Where' y luego vuelven a la primera ocurrencia. Esto es inadecuado, debido a que el método 'First' también puede aplicar la condición 'Where'. Nunca debe darse por sentado que el valor siempre se va a encontrar. Si se utiliza "First" cuando no se encuentra el valor, se produce un error. Por lo tanto, es mejor utilizar FirstOrDefault. Al utilizar FirstOrDefault, si no se ha encontrado ningún valor, se devolverá el valor por defecto de este tipo y no se lanzará ninguna excepción.

//INCORRECTO
List numbers = new List(){1,4,5,9,11,15,20,21,25,34,55};
return numbers.Where(x => Fibonacci.IsInFibonacciSequence(x)).First();
//PARCIALMENTE CORRECTO
return numbers.First(x => Fibonacci.IsInFibonacciSequence(x));
//CORRECTO
return numbers.FirstOrDefault(x => Fibonacci.IsInFibonacciSequence(x));

Casting por medio de (T) en lugar de as (T) cuando posiblemente no es casteable

Es muy común que los desarrolladores de software utilicen el casting (T), en lugar de as (T). Y por lo general, no tiene ninguna influencia negativa porque los objetos casteados son siempre casteables. Sin embargo, si hay incluso una ligera probabilidad de que un objeto pueda ser no casteable, se debe utilizar el casting as (T).

//INCORRECTO
var woman = (Woman)person;
//CORRECTO
var woman = person as Woman;

No utilizar mapeadores para reescribir propiedades

Hay una gran cantidad de mapeadores de C # muy potentes (por ejemplo AutoMapper). Si unas pocas líneas de código simplemente se conectan propiedades reescritas, es sin duda lugar para un mapeador. Incluso si algunas propiedades no se copian directamente, sino que se lleva a cabo alguna lógica adicional, utilizar un mapeador sigue siendo una buena opción

Relanzar excepciones incorrectas

Los programadores de C# suelen olvidar que cuando lanzan una excepción utilizando throw ex pierden el seguimiento. Es entonces cuando se hace más difícil el depurar una aplicación y lograr los mensajes de log adecuados. Cuando simplemente usando throw no se pierden datos y toda la excepción, junto con el seguimiento, puede ser recuperada fácilmente.

//INCORRECTO
try
{
   //some code that can throw exception [...]
}
catch (Exception ex)
{
   //some exception logic [...]
   throw ex;
}
//CORRECTO
try
{
   //some code that can throw exception [...]
}
catch (Exception ex)
{
   //some exception logic [...]
   throw;
}

Usar foreach en vez de for para cualquier cosa

Recuerda que si deseas iterar a través de todo lo que no sea una colección (por ejemplo, un array), utilizar el bucle for es mucho más eficiente que el uso del bucle 'foreach'

Recuperar o guardar datos en base de datos en más de 1 de llamada

Este es un error muy común, especialmente entre los desarrolladores junior y especialmente cuando utilizas un ORM como Entity Framework o NHibernate. Cada llamada a la DB consume una cierta cantidad de tiempo, por eso es crucial disminuir la cantidad de llamadas a la DB tanto como sea posible. Hay muchas maneras de hacer esto, solo debes informarte.

Fuente: goyello.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP