Bad Coding Academy: líneas nuevas, espacios y sangría

¡Hola, Habr! Les presento a su atención la traducción del artículo "Academia de estilo de código oscuro: saltos de línea, espaciado y sangría" del autorzhikin2207



imagen



¡Hola gente! Déjame continuar con nuestra academia de código incorrecto. En esta publicación, revelaremos otra forma de ralentizar la lectura de su código. Los siguientes trucos pueden ayudarlo a reducir la comprensión de su código y aumentar las posibilidades de errores en él. Listo? Empecemos.



Los saltos de línea, los espacios y las sangrías pueden causar la muerte.



¿Cómo lee la gente los libros? De arriba a abajo, de izquierda a derecha (al menos la mayoría). Lo mismo sucede cuando los desarrolladores leen el código. Una línea de código debe contener un pensamiento, por lo tanto, cada línea debe contener solo un comando. Si desea avergonzar a otros desarrolladores, será mejor que infrinja estas pautas. Y déjame mostrarte cómo hacerlo.



Ejemplo # 1



Mira este fragmento de código. Una idea en una línea. El código es tan limpio que me enferma.



return elements
    .Where(element => !element.Disabled)
    .OrderBy(element => element.UpdatedAt)
    .GroupBy(element => element.Type)
    .Select(@group => @group.First());


Podemos combinar todas las declaraciones en una sola línea, pero eso sería demasiado fácil. En este caso, el cerebro del desarrollador comprenderá que algo anda mal aquí y dividirá a los operadores de izquierda a derecha. ¡Pan comido!



Es mejor mantener algunas declaraciones en la misma línea y otras divididas. La mejor opción es cuando el desarrollador ni siquiera se dé cuenta de algunos de los operadores, lo que dará lugar a malentendidos y, en última instancia, a un error. Otra opción: reduciremos lentamente su comprensión de este código hasta que grite "¿¡Qué diablos es esto !?"



return elements.Where(e => !e.Disabled)
    .OrderBy(e => e.UpdatedAt).GroupBy(e => e.Type)
    .Select(g => g.First());


¿Qué le parece eso? Puede agregar un poco de sangría para que otros desarrolladores formateen su código durante décadas si necesitan cambiar el nombre de la variable de elementos.



return elements.Where(e => !e.Disabled)
               .OrderBy(e => e.UpdatedAt).GroupBy(e => e.Type)
               .Select(g => g.First());


Envíame una postal si tu equipo revisa este método.



Consejo : deje un par de declaraciones en una línea y un par en líneas separadas.



Ejemplo # 2



Absolutamente la misma idea aquí. Este es el único código que ve con mucha más frecuencia.



var result = 
    (condition1 && condition2) || 
    condition3 || 
    (condition4 && condition5);


El procedimiento es el mismo. Líneas separadas para confundir al lector tanto como sea posible. Juega un poco con nuevas líneas para obtener el mejor resultado.



var result = (condition1 && condition2) || condition3 || 
    (condition4 && condition5);


Y agregue un poco de sangría para que el código parezca normal.



var result = (condition1 && condition2) || condition3 || 
             (condition4 && condition5);


Recuerde, debe lograr un equilibrio entre la ilegibilidad de su código y la credibilidad de su estilo.



Consejo : juegue con nuevas líneas para obtener mejores resultados.



Ejemplo # 3



¿Qué pasa con esto?



if (isValid) 
{ 
    _unitOfWork.Save();
    return true; 
} 
else 
{ 
    return false; 
} 


El mismo problema, pero del otro lado. Aquí, la mejor opción sería combinar los operadores en una línea, por supuesto, colocando llaves.



if (isValid) { _unitOfWork.Save(); return true; } else { return false; } 


Este enfoque solo funcionará si tiene pocas declaraciones en los bloques entonces y de lo contrario. De lo contrario, su código puede ser rechazado en la etapa de revisión del código.



Consejo : Combine pequeñas declaraciones if / for / foreach en una línea.



Ejemplo # 4



80 caracteres por línea es el estándar recomendado actualmente. Esto le permite mantener la concentración del desarrollador mientras lee su código. Además, puede abrir dos documentos al mismo tiempo en la misma pantalla cuando sea necesario, dejando espacio para el Explorador de soluciones.



bool IsProductValid(
    ComplexProduct complexProduct, 
    bool hasAllRequiredElements, 
    ValidationSettings validationSettings)
{
    // code
}


La forma más fácil de ralentizar la lectura de su código es obligando a otros desarrolladores a desplazar su código horizontalmente. Simplemente ignore la regla de los 80 caracteres.



bool IsProductValid(ComplexProduct complexProduct, bool hasAllRequiredElements, ValidationSettings validationSettings)
{
    // code
}


Es muy fácil: olvide lo que sucedió antes de comenzar a desplazarse o salte la línea en la que comenzó. Gran truco.



Consejo : a propósito, ignora la regla de los 80 caracteres.



Ejemplo # 5 Una



línea en blanco en el lugar correcto es una herramienta poderosa para agrupar su código y hacer que se lea más rápido.



ValidateAndThrow(product);

product.UpdatedBy = _currentUser;
product.UpdatedAt = DateTime.UtcNow;
product.DisplayStatus = DisplayStatus.New;

_unitOfWork.Products.Add(product);
_unitOfWork.Save();

return product.Key;


Una línea en blanco en el lugar equivocado, combinada con los otros consejos de este artículo, puede ayudarlo a guardar su trabajo. ¿Qué línea en blanco prefieres?



ValidateAndThrow(product);
product.UpdatedBy = _currentUser;
product.UpdatedAt = DateTime.UtcNow;

product.DisplayStatus = DisplayStatus.New;
_unitOfWork.Products.Add(product);

_unitOfWork.Save();
return product.Key;


Consejo : inserte líneas en blanco al azar.



Ejemplo n. ° 6



Cuando se compromete con un repositorio, tiene una pequeña oportunidad de ver qué es exactamente lo que se va a comprometer. ¡NO HAGAS ESO! Está bien si agrega una línea en blanco adicional como aquí.



private Product Get(string key) 
{
    // code
}

private void Save(Product product) 
{
    // code
}


O, mejor aún, agregó algunos espacios en una línea en blanco (para comprender la diferencia, resalte la quinta línea).



private Product Get(string key) 
{
    // code
}
    
private void Save(Product product) 
{
    // code
}


¿Por qué necesitas esto? El código sigue funcionando (pero no es seguro). Continúas entendiendo tu código, pero el otro desarrollador entenderá menos tu código. No puede simplemente agregar algunos espacios en blanco adicionales a los métodos comunes a la vez (la revisión del código es nuestro enemigo), pero usar esta práctica creará un desastre después de un par de semanas de desarrollo activo.



Otro beneficio adicional de usar espacios adicionales en una cadena es que cuando otros desarrolladores comprometen la funcionalidad relacionada, su IDE puede corregir automáticamente el formato. En la revisión del código, verán mil líneas rojas y verdes. Si entiende lo que quiero decir;)



Por la misma razón, puede configurar pestañas en su IDE si usa espacios en su proyecto, y viceversa.



Consejo : no mires el código antes de confirmar.



Ejemplo n. ° 7



Omita a los desarrolladores que pueden ver espacios adicionales en el código. Son peligrosos para tu carrera.



product.Name = model.Name;
product.Price = model.Price;
product.Count =  model.Count;


Consejo : conoce a tu enemigo.



Es difícil hacer que su código no sea compatible. Cuando acumula muchos pequeños problemas, estos crecen sin su participación. Los desarrolladores jóvenes escribirán su código de acuerdo con sus plantillas. Un día, durante una revisión de código, escuchas "¿Qué demonios?" del líder de su equipo, y aquí podrá utilizar el eslogan: “¿Qué? Siempre hacemos esto ”, y le mostramos mil lugares en el código donde está escrito de la misma manera.



Que te diviertas.



All Articles