2011-10-22 149 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聲明以避免空白區塊;我發現代碼更易於閱讀。