前言
九月終於開始自己第一份正式的全職工作,原本預期會先寫JavaScript,所以職前有再學了一下,結果沒想到一開始是寫自己原本不想碰的C#。倒也不是不喜歡,只是自己原本想學的語言,他的次序比較後面,但是不管,反正學什麼都好,只要能夠變強我都可以。由於語法與過去學習C/C++頗為相似,所以大致上沒有障礙,只是出現一些奇形怪狀的語法,也問了一些奇怪的問題。Google一下,也許應該稱為"Syntactic sugar",或中譯成「語法糖」,太噁心了,還是用英文來稱呼好了。
Syntactic sugar
Sugar,糖,吃糖,有甜頭。也程式有時候是痛苦的,因為有些東西是既定的,寫起來很「ak-tsak」,這時候如果可以簡單一點寫,又不影響功能不就太好了。所以就讓compiler/interpreter 來幫忙處理,在寫程式時就可以爽一點。不過,吃糖一時爽,一直吃糖一直爽?
起源
維基百科有寫到,"Syntactic sugar"是Peter J. Landin 這位先生看人家寫 ALGOL-like programming language時,有很像lambda calculus的寫法,所以就這樣說了。
一些範例
C
// 這在我年輕時可是讓我想破頭 a = a + b; a += b; // 雖然指標用的也算習慣,不這樣也算Syntactic sugar? a[i] == *(a + i); a->x == (*a).x; // 這還蠻好用的 int a = b > c ? d : e;
C#
// 由complier自動判斷型別 var x = expr // 自動呼叫Dispose()釋放資源 using (var sr = new StreamReader(filename)) { }
對我來說
在沒學之前,會覺得這是什麼糖?可能本來會的知識,被包裹起來不認得了。我記得那時我要用C#寫一支處理CSV的程式,我看CsvHelper官方寫著:
// 由complier自動判斷型別 using (var sr = new StreamReader(filename)) using (var csv = new CsvReader(sr)) { }我還跟主管說:「我不知道這個using是要放在哪」,因為C#是用using來接package。知道答案後,真的應該怪當初他出C#的考題,我直接跳過不寫。所以還是要多看多學,才比較有可能知道別人在寫些什麼。最近還有?與??,看別人的程式真的是處處有驚喜。
Derivative terms
Syntactic salt
這就是相反來說,那些對於程式閱讀或撰寫有害的方式。
Syntactic saccharin
這則是指那些華而不實的"Syntactic sugar",簡單來說,炫技、耍花槍。
References
Lambda calculus:
https://en.wikipedia.org/wiki/Lambda_calculus
C#语法糖(Csharp Syntactic sugar)大汇总:
C#语法糖(Csharp Syntactic sugar)大汇总:
https://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html
Syntax sugar in C\C++, C#, and T-SQL:
https://coherence0815.wordpress.com/2016/01/06/syntax-sugar-in-cc-and-cs/
Syntax sugar in C\C++, C#, and T-SQL:
https://coherence0815.wordpress.com/2016/01/06/syntax-sugar-in-cc-and-cs/
沒有留言:
張貼留言