2011-10-22 108 views
5

我在哪里工作,我看到以下类型的用PL/SQL代码的很多的,奇编码风格

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

我觉得这很奇怪,因为一个C相当于会是什么样子这个,

if (a>b) 
{ 

} 
else 
{ 
    c=a*b; 
} 

而上述类型的代码已被不良风格在C论坛,我知道什么时候张贴由新手。 由于PL/SQL不允许空白块并且总是需要一个NULL语句,这种编码风格是否带来了w.r.t可读性的优点,还是只是一个偏好问题? FWIW,用上述风格编码PL/SQL的人肯定是一位经验丰富的编码员。 与以下相比有什么优势吗?

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

没有功能上的差异,因此这是纯粹的偏好。 –

+0

THEN子句中可能还有其他内容被删除。这是删除它的简单方法。不是我会做,但它的作品。 –

+0

@BrianRoach:当'a'或'b'为'null'时有一个功能区别。见Maep的回答。 – user272735

回答

9

看来,a <= b不是如果任何部分为空,则为true。这就是为什么这两个陈述是不同的。

在第一种情况下,如果a为空,则c = a*b将运行。在第二种情况下,它不会。除非你肯定知道ab不为空,等效语句将变为:

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

这可能是精确的语义;如果是这样,它就会大大违反最不经意的原则。 PLSQL的设计者和任何真正打算这样做的编码人员都应该开枪。任何不知道这一点的新手(或者像我这样老古板)都会错误地修改此代码,从而增加维护成本。 –

+0

这是如何违反最小惊喜的原则?它在测试的情况下非常明确。 – eaolson

1

我在哪里工作,我们不希望有空块,所以我们总是代码我们喜欢你的底例如,没有ELSE IF。我认为这很大程度上是一个偏好问题,但我宁愿按照最后的做法反转IF声明以避免空白区块;我发现代码更易于阅读。