2011-10-22 22 views
5

Donde trabajo, veo mucho de la de los siguientes tipos de código escrito en PL/SQL,estilo de codificación impar de bloque IF en PL/SQL

IF a>b THEN 
    NULL; 
ELSE 
    c:=a*b; 
END IF; 

Me parece extraño porque un equivalente de C se vería esto,

if (a>b) 
{ 

} 
else 
{ 
    c=a*b; 
} 

Y el tipo de código anterior ha sido mal visto como un mal estilo en un foro de C, que yo sepa cuando publicado por novatos. Como PL/SQL no permite bloques vacíos y siempre requiere una instrucción NULL, ¿este tipo de estilo de codificación ofrece alguna ventaja con respecto a la legibilidad o solo es cuestión de preferencia ?. FWIW, el tipo que codificó PL/SQL con el estilo anterior ciertamente parece ser un codificador experimentado. ¿Hay alguna ventaja en comparación con la siguiente?

IF a<=b THEN 
    c:=a*b; 
END IF; 
+0

No hay diferencia funcional por lo tanto es pura preferencia. –

+0

Puede haber habido algo más en la cláusula THEN que se eliminó. Esta es una manera fácil de eliminarlo. No es lo que haría, pero funciona. –

+0

@BrianRoach: Hay una diferencia funcional cuando 'a' o' b' es 'nulo'. Vea la respuesta de Maep. – user272735

Respuesta

9

Parece que a <= b será no ser verdadero si alguna parte es nula. Es por eso que estas dos declaraciones son diferentes.

En el primer caso, c = a*b se ejecutará si a es nulo. En el segundo caso, no lo hará. A menos que sepa con certeza que a y b no son nulos, la declaración equivalente sería en cambio ser:

IF a<=b or (a is null) or (b is null) THEN 
    c:=a*b; 
END IF; 
+0

Esta puede ser la semántica precisa; si es así, viola bastante el principio de la menor sorpresa. Tanto el diseñador de PLSQL como cualquier codificador que realmente intente esto debería filmarse. Cualquier novato (o viejo fogy como yo) que no sepa esto modificará este código incorrectamente, aumentando los costos de mantenimiento. –

+0

¿Cómo viola esto el principio de menor sorpresa? Es bastante explícito en los casos que está probando. – eaolson

1

donde trabajo, no nos gusta tener los bloques vacíos, por lo que siempre nuestro código como ejemplo su parte inferior, sin el ELSE IF. Creo que es en gran medida una cuestión de preferencia, pero preferiría invertir la declaración IF como lo hizo al final para evitar el bloque vacío; Encuentro que el código es más fácil de leer.

Cuestiones relacionadas