En un mundo sano, compilarán exactamente el mismo código de bytes, por lo que son idénticos en lo que a rendimiento se refiere. A continuación, la única diferencia es que los seres humanos:
Creación de una variable temporal hace depuración poco más fácil: se puede poner un punto de interrupción en la instrucción de retorno e inspeccionar el valor de p
. En la versión de una línea, esto es más difícil de hacer.
Hacerlo en una línea elimina una variable, lo que reduce la complejidad, por lo que el código un poco más fácil de leer.
En la práctica, lo escribiría en una línea, y en el peor de los casos creo una variable temporal si me encuentro con el problema de depuración. Además, ¿no se supone que las pruebas unitarias eliminan la necesidad de depuración? :-)
Si se realizara un mayor acceso a la variable, no habría dudas ya que el escenario ya no existiría. – Robin
Realmente, cuestionaría la existencia de este método por completo en una revisión del código. ¿Una nueva rutina de una línea *() para devolver a una persona con algunos valores predeterminados? Si no va a proporcionar alguna funcionalidad adicional sobre la llamada "nueva Persona()" con su rutina newPerson(), newPerson() es un método con IMO de utilidad limitada. ¿Por qué no simplemente tener un: public Person() {...} constructor? Lo mismo sin la capa de llamada de método. Son opciones igualmente pobres para un método, pero al menos la primera forma le da la oportunidad de hacer algo útil para el usuario que no llamaría a la persona nueva() por su propia cuenta. –
El método en este ejemplo es trivial. Prefiero usar ejemplos simples sobre publicar un método real que estoy usando en el código en vivo. – mheathershaw