語法修飾在某些情況下不愉快的方式進行交互。
一些具體例子:
第一個是C#(或Java)具體而言,自動拳擊和鎖定/同步構建
private int i;
private object o = new object();
private void SomethingNeedingLocking(bool b)
{
object lk = b ? i : o;
lock (lk) { /* do something */ }
}
在這個例子中,其可以使用任何對象作爲有幫助鎖構造一個同步點與自動裝箱結合在一起會導致一個可能的錯誤。鎖只是每次都在我的新盒裝實例上進行。有爭議的是,鎖構造是有幫助的,而其他一些特定的構造可以更好地鎖定,但肯定組合仍然有缺陷。
多變量的聲明和指針:
long* first, second;
一個經典的錯誤(雖然容易被發現)。多個變量的糖不適合指針聲明。
一些構造不需要糖的其他方面引起的問題,一個典型的例子是++運算符。它巧妙地讓你避免編寫
i = i + 1;
一種廣泛使用的構建體(和一個它本身有缺陷範圍,因爲你必須記住要更新這兩個變量,如果你想使用我改變)。然而,由於這很容易嵌入到其他表達式中,所以prefix和postfix的問題就會擡頭。 在for循環中使用時,這並不重要,評估發生在任何其他評估之外,但在其他地方使用時可能會造成混淆(因爲您可能嵌入了計算的一個非常重要的方面(無論是當前還是應該使用下一個值)變成一個非常小且容易遺漏的表格
以上所有內容(除了編譯器真正應該爲您指定的鎖/盒之外)都是使用情況良好的情況,或者有經驗的程序員可能會認爲「這對我來說非常清楚」,但對於新手程序員或那些轉向不同語法的人來說,存在混淆的可能性。
你能提供的示例或用例? – spoulson 2009-02-13 21:18:47
我從未聽過這個意見。你能舉一個你談論的那種語法糖的例子嗎? – 2009-02-13 21:19:25
在一個隨機的一面說明,我剛註冊SyntaticSugar.com – mmcdole 2009-02-13 21:47:35