¿Cómo cambió su documento de estándares de codificación cuando actualizó a C# 3.0/VS2008?
-
19-08-2019 - |
Pregunta
Estamos en el proceso de actualizar nuestros proyectos de C# 2.0/VS2005 a C# 3.0/VS2008.Como parte de la actualización, estamos agregando algunos elementos a nuestro documento de estándares de codificación.
¿Cómo cambiaría (o cambió) su documento de estándares de codificación al actualizar de C# 2.0/VS2005 a C# 3.0/VS2008?
Solución
Podrías/deberías dar consejos sobre:
- Cuándo utilizar expresiones de consulta frente a notación de puntos
- Cualquier restricción en el uso de expresiones lambda (p. ej."no modificar las variables capturadas).(Esto también podría aplicarse a métodos anónimos en C# 2, por supuesto).
- Cuándo escribir métodos de extensión
- Cuándo utilizar variables escritas implícitamente (
var
)
Los dos últimos causan cierta controversia, particularmente var
.
Si sus convenciones brindan pautas de diseño, le sugiero que también aconseje a los programadores que consideren el uso de delegados para la especialización donde anteriormente podrían haber usado herencia o interfaces.Un buen ejemplo de esto es la clasificación: es más fácil (y más legible) usar una proyección para especificar un orden de clasificación que escribir una implementación de IComparer<T>
.
Otros consejos
La actualización coincidió con un nuevo proyecto, así que cuando nos mudamos comenzamos a usar herramientas como StyleCop y FxCop que alteraron nuestros estándares de codificación. También los aplica fácilmente: o)
Nada debería cambiar per se debido a la actualización, aunque es posible que deba observar los estándares de codificación en torno a nuevas características, como expresiones LINQ, diseño, Lambda versus sintaxis de consulta.
Mi motivo favorito personal es el uso de var
donde sea " posible " ;.
" Posible " actualmente se define como uno de los siguientes casos, principalmente en orden decreciente de pulcritud:
Obvio, ayudando a SECAR:
var obj1 = new Something();
var obj2 = (Something)ObscureFunction();
var obj3 = ObscureStuff() as Something;
Guardado, no me importa mientras se compile:
var obj4 = ObscureFunction();
foreach(Something s in obj4) { ... }
Genéricos complejos y casi cualquier resultado LINQ:
var obj5 = ctx.GetQuery<Something>()..ToList(..)..GroupJoin(..)...ToLookup(...);
Mis estándares para nuevas funciones para 2008:
- Use var con moderación solo con tipos anónimos.
- Fomentar el uso de expresiones lambda sobre delegados.
- Use solo métodos de extensión cuando no tenga control del código fuente