style psr guide google español code coding-style

coding style - psr - Estilo de codificación... ¿condición de error primero o el último?



psr-2 (8)

¿Por qué no crear un punto de salida de la función y hacer una limpieza adecuada allí en lugar de tener múltiples retornos ...?

DWORD bRetVal= TRUE; if(foo is null) { bRetVal = FALSE; goto Error; } else { // do something } Exit: return bRetVal;

¿Cuál es mejor en general en términos del pedido? ¿Pones la condición de falla en la parte superior o inferior?

if (noProblems == true) { // do stuff } else { // deal with problem }

O

if (noProblems == false) { // deal with problem } else { // do stuff }


Al igual que con try / catch , hago el flujo normal y luego manejo las condiciones de excepción.

Eso no significa que la comprobación / depuración de errores no ocurra primero, pero eso es si no confío en lo que me han pasado.

p.ej,

if (foo is null) then // bail end if if (bar == foo) then // foo hasn''t been changed... print the regular report else // foo has changed, run the reconciliation report instead. end if

Me gusta que la historia feliz fluya como una línea recta y que la historia infeliz se desarrolle en su propia espuela.


Depende de lo que sea más claro para ti. Quiero decir, lo que tiene más sentido, que noProblems tiene un valor verdadero o que tiene un valor falso.

Por ejemplo, para isDeviceEnabled () siempre verificaría un resultado verdadero, ya que "Activado" tiene implícitamente un valor positivo. Para un valor negativo implícito, podríamos verificar, por ejemplo, "isMemoryAvailable ()", tal vez porque necesita verificar solo si no hay más espacio para nuevos objetos / matrices u otros datos.


El primero me parece ligeramente preferible porque evita un doble negativo en el condicional.

Aparte de eso, has construido cosas para que no puedas realmente

// do stuff

Después de ti

// deal with problem

así que más allá de eso uno parece tan bueno como el otro.


Es un tipo de decisión muy individual, pero tiendo a poner mis condiciones de error primero, bajo el pretexto de agrupar como código juntos. Es decir, si hago algo, y falla, el control de ese error es realmente parte de hacer eso; si pongo el cheque de falla y acción basado en eso al principio de mi código, he agrupado mi acción y la compleja respuesta a esa acción en conjunto (trabajando en la suposición de que un resultado de falla es en realidad un caso de devolución más complejo que un éxito).


Tal vez esto dependa de las convenciones del lenguaje u otros factores, pero creo que el caso nominal debería estar en la parte superior, y las ramas deberían contener las condiciones excepcionales. Hace que el código sea mucho más fácil de leer. Esto es especialmente cierto cuando hay muchas condiciones excepcionales, y en la mayoría de los casos las hay. Podrá asumir fácilmente que el autor espera que esta ruta específica se tome la mayor parte del tiempo, y comprender el código más fácil de esta manera.

De "Código completo, 2da edición" sección 15.1:

Al poner primero los casos más comunes, minimiza la cantidad de casos excepcionales que alguien debe leer para manejar el caso y encontrar los casos habituales. Mejoras la eficiencia porque minimizas la cantidad de pruebas que hace el código para encontrar los casos más comunes.


si son 1 o 2 líneas y un regreso temprano, lo pondría en la parte superior, especialmente si está al comienzo de la función. eso casi parece un contrato. de lo contrario, voy con la regla de "condiciones positivas antes negativas".


me gusta eliminar primero los casos de error - y regresar de la función antes de tiempo para que el ''camino feliz'' permanezca sin anidar, por ejemplo

if (some error condition) { //handle it return; } //implicit else for happy path ...

si es fácil identificar las condiciones que conducen al camino feliz, entonces, por supuesto, pon esa cláusula primero (¡gracias Marcin!)