2019年9月20日 星期五

Syntactic sugar

前言

九月終於開始自己第一份正式的全職工作,原本預期會先寫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)大汇总:

沒有留言:

張貼留言