基本內容
舉個例子:在C語言裡用a[i]表示*(a+i),用a[i][j]表示*(*(a+i*數組a第二維的長度)+j),由此可見語法糖不是"現代語言"獨有,這種寫法簡潔明了,容易被人理解。實際上從面向過程到面向對象也是一種語法糖,C語言可以通過它的指針、類型轉換,結構實現面向對象的編程風格,但是C++更進一步的推廣了這種風格,更加易用,不過到了C#把OO的風格發揮得淋漓盡致。OO的編程風格對於面向過程來說是不是一種語法糖呢?如果生硬地照此理解,只有計算機硬體指令才不算語法糖,而其他一切利用編譯器、彙編器將代碼抽象,和自然語言更相近的手段都算語法糖。
很多很多編程思想,編程理論層出不窮,當然,對於學習來說我們是要抓住技術的核心,但對於工程來說如何提高工程質量,如何提高工程效率也是我們要關注的,既然這些語法糖能輔助我們以更好的方式編寫代碼為什麼要"抵制"呢?
語法糖和其他編程思想一樣重要,什麼duck type,人本接口,最小接口,約定優於配置,廣義來講都是一些思想上的"語法糖"。
不過也並不是沒有反對的聲音,這其中就有圖靈獎的第一個獲得者: Alan Perlis。.net從2.0到3.0到3.5底層CLR並沒有做更新,沒有添加任何新的IL指令,所以C#從2.0到3.0中所有的特性都是語法糖,就算從1.0到2.0,也只有一個泛型不是語法糖,其餘的新特性也都是如此,但是每一次C#發布新特性的時候我們不得不為之而鼓舞,為之而喝彩。新的語法可以釀造更好的編程風格,一些難以實現的方面也輕而易舉了。
需要聲明的是"語法糖"這個詞絕非貶義詞,它可以給我們帶來方便,是一種便捷的寫法,編譯器會幫我們做轉換;而且可以提高開發編碼的效率,在性能上也不會帶來損失。