En un debate sobre las variables de retorno, algunos miembros del equipo prefieren un método para devolver el resultado directamente a la persona que llama, mientras que otros prefieren declarar una variable de retorno que luego se devuelve a la persona que llama (ver ejemplos de código a continuación)
El argumento a favor de este último es que permite que un desarrollador que está depurando el código encuentre el valor de retorno del método antes de que vuelva a la persona que llama, lo que hace que el código sea más fácil de entender: esto es especialmente cierto cuando las llamadas a métodos están conectadas en cadena.
¿Hay alguna guía sobre cuál es la más eficiente y / o hay alguna otra razón por la que deberíamos adoptar un estilo sobre otro?
Gracias
private bool Is2(int a)
{
return a == 2;
}
private bool Is3(int a)
{
var result = a == 3;
return result;
}
fuente
result
antes de devolverlo.stloc.0
yldloc.0
en la segunda versión). Pero creo que eso sucede solo en modo de depuración. Y no es realmente importante aquí de todos modos.a = b = c;
ya == b == c
evitaría escribir algo que se parezcaa = b == c
si puedes. Cuando vi por primera vez una línea de código como esa, me tomó unos segundos descubrir qué está pasando. Ese código se destacó. Me gustaría poner un paréntesisa == 3
, pero StyleCop no le gusta, una buena razón para usar la versión número uno. Algo más: esto es esencialmente una lambda, comoa => (a == 3)
. ¿Por qué agregar una línea de código a una función trivial ya hinchada?Respuestas:
Debido a que uso Resharper con Visual Studio, Ctrl-RV (o Ctrl-Alt-V, si usa las combinaciones de teclas Resharper / IntelliJ) convierte su primer ejemplo en su segundo ejemplo. Entonces, cuando quiero depurar, puedo hacerlo fácilmente. Y si olvido volver a ponerlo, no me sentiré mal porque Ctrl-RI lo volverá a poner de nuevo para que sea más fácil de leer.
En serio, pierda su tiempo discutiendo sobre cosas más importantes. Como dónde colocar tus llaves o espacios principales frente a las pestañas.
fuente
Personalmente, encuentro el primer ejemplo más fácil de leer. Todavía puede depurarlo, estableciendo un punto de interrupción en la declaración de devolución y agregando
a == 2
a la ventana de vigilancia o usando la vigilancia rápida.Pero esto es realmente una cuestión de preferencia personal. Ambas versiones están bien.
fuente
Cuando el código es tan fácil de leer como su ejemplo, no hay nada de malo en devolver el resultado de una operación lógica como
return a == 2
. Sin embargo, si el valor de retorno es una declaración más compleja o se parece aentonces querrá usar variables para almacenar piezas de eso primero y simplificar la declaración de devolución, en aras de la legibilidad.
fuente
En un ejemplo simple como ese, cualquiera está bien.
Para ejemplos más complicados, prefiero la segunda forma. Eso es solo porque es más legible y es probable que otros tengan que mantener el código.
fuente
result
, que en sí mismo es un identificador completamente no descriptivo e inútil.