5

me encontré con la herramienta de análisis de código VS 2008 contra un objeto que creé y recibí la siguiente sugerencia ...análisis de código se vuelve con la sugerencia acerca de no usar los parámetros de "fuera"

Advertencia 147 CA1021: Microsoft.Design : considere un diseño que no requiere que 'returnValue' sea un parámetro de salida.

Encontré los parámetros de "salida" bastante útiles y no me di cuenta de que se los consideraba una práctica de diseño desaprobada. Quería saber si alguien podría arrojar algo de luz sobre el motivo por el que recibí esta Advertencia. Si es una mala práctica? ¿por qué? y ¿cuál sería una buena práctica?

Agradezco cualquier consejo.

+0

¿Podemos ver todo el método? –

+0

@Lasse: Desafortunadamente, mi empleador no me permite publicar muestras de código de propiedad. Mis disculpas. Puedo decir que la mayoría de los métodos tienen un tipo de retorno de "bool" para indicar éxito/falla y utilizamos parámetros de "salida" para devolver datos. ¡Gracias por su respuesta! –

+0

Sin embargo, utilizar el tipo de devolución para indicar el éxito y el fracaso es malo en estos días. – quillbreaker

Respuesta

10

Cada advertencia de Análisis de código tiene documentación asociada a la que puede acceder resaltando la advertencia y presionando F1. También puede hacer clic derecho en el elemento para obtener ayuda.

En cualquier caso, aquí está el documentation that explains that particular warning.

Diría que hay algunos casos en los que los parámetros de salida siguen siendo una buena opción, especialmente cuando se trata del lenguaje de codificación TryParse, porque es una manera bien establecida de hacer las cosas que la mayoría de la gente debe entender es

En uso general, sin embargo, hay soluciones mejores y más orientadas a objetos para valores de retorno múltiples.

+0

@Mark: ¡gracias por la información y el enlace! no se dio cuenta del tidbit F1 y el enlace explica muy bien lo que está sucediendo. Aprecio la respuesta! –

+0

La expresión de codificación 'TryParse' (ejemplo: [Int32.TryParse Method] (https://msdn.microsoft.com/en-us/library/system.int32.tryparse%28v=vs.110%29.aspx)) es útil porque permite probar un valor sin la necesidad de manejar una excepción. Una excepción lanzada es computacionalmente costosa. – DavidRR

4

Una vez corrí el análisis del código en mi proyecto. También recibí muchas sugerencias interesantes, muy brevemente apagué esto. Muchas de las sugerencias son de naturaleza religiosa, puedes hacerlo de una u otra forma, una cuestión de estilo y no una mala práctica.

A su situación. Si solo tiene un parámetro de retorno, devuélvalo a la función.

Si también tiene un código de retorno que ocupa el lugar de devolución, considere usar excepciones para informar al código de llamante de los errores de operación.

Si tiene muchos parámetros para devolver que están estrechamente relacionados entre sí, haga una clase/estructura para mantenerlos juntos y devolverlos como un paquete.

+4

No creo que sea justo llamar religioso a las reglas de California. La gran mayoría de ellos se basan en un análisis exhaustivo del diseño de API y estudios de casos de lo que * la mayoría de los desarrolladores entienden. El libro Framework Design Guidelines (http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321246756) proporciona mucha información esclarecedora sobre estos principios. Puede ser que no estés de acuerdo con esas reglas, y sin duda eres libre de no usarlas, pero son algo más que "religioso". –

+0

@Mark, El problema con muchas de las reglas de CA es que el análisis completo es cómo deben funcionar las API PUBLICAS cuando el proveedor (Microsoft) no puede obtener el código de seguridad recompilado. Este no es el caso con la mayoría de los programas de código que escriben los programadores normales. –

2

Apagué esta advertencia específica en la mayoría de mis proyectos. Dado que, sé que, cuando uso un parámetro de salida, tengo una buena razón para hacerlo, ya que trato de evitarlos por completo.

que podía imaginar sin embargo, que, cuando se trabaja con varias personas en un proyecto, es posible que desee tener esta advertencia encendida si quiere hacer algunas revisiones de código ...

3

Muchas de las advertencias de análisis de código parecen para mí ser relevante para escribir el código API que utilizarán los terceros. Su regla con parámetros de 'salida' es un caso clásico: parte del motivo por el que no se usan es porque muchos otros programadores no los conocerán.

Si no coinciden con lo que está escribiendo, apague las reglas de análisis de código que no le convienen. Personalmente, tiendo a desactivar las reglas de nomenclatura, portabilidad e interoperabilidad ya que no son relevantes para el tipo de código que escribo.

Cuestiones relacionadas