語法糖

计算机编程语言中一些方便程序员使用,提高代码可读性、简洁度的便捷语法

語法糖(英語:Syntactic sugar)是由英國電腦科學家彼得·蘭丁發明的一個術語,指電腦語言中添加的某種語法,這種語法對語言的功能沒有影響,但是更方便程式設計師使用。語法糖讓程式更加簡潔,有更高的可讀性。

舉例來說,許多程式語言提供專門的語法來對陣列中的元素進行參照和更新。從理論上來講,一個陣列元素的參照涉及到兩個參數陣列下標向量,比如這樣的表達式:get_array(Array, vector(i, j))。然而,許多語言支援這樣直接參照:Array[i, j]。同理,陣列元素的更新涉及到三個參數:set_array(Array, vector(i, j), value),但是很多語言提供直接賦值:Array[i, j] = value

語法糖的例子

for迴圈

一個例子是C語言中的for迴圈:

for (i = 0; i < 10; i++) {
    // P
}

其效果在不考慮for迴圈中的continue陳述式時和以下的while迴圈是一樣的,其中P是迴圈要處理的主體。

i = 0;
while (i < 10) {
    // P
    i++;
}

中置表示法

Haskell雖然是函數程式語言,但它提供了a + b這種「中置表示法」的語法,讓程式更容易撰寫,也比較容易閱讀。

運算子多載

C++提供了運算子多載,可以把運算子當作函數來寫,當使用運算子就等同於使用該函數,讓程式更容易撰寫,也比較容易閱讀。

關聯陣列

JavascriptLua中物件的「」如果不使用底線以外的符號、數字不做開頭時可以使用物件成員方式來取的「」。若不符合上述規則僅能使用陣列索引方式取得「值」。

以Javascript來舉例:

let a = { 'abc': 5, '12w': 6, '>': 7, '_': 8 };

console.log(a.abc);     //因為「鍵」符合規則,所以可以直接使用物件成員方式來取得「值」。
console.log(a["abc"]);  //也能用陣列索引的方式取得「值」。
console.log(a["12w"]);  //因為「鍵」是數字開頭,所以僅能以陣列索引方式取得「值」。
console.log(a[">"]);    //因為「鍵」有使用到符號,所以僅能以陣列索引方式取得「值」。
console.log(a._);       //雖然「鍵」有使用到符號,但是因為Javascript中底線可以當作變數名稱,所以可以使用物件成員方式來取得「值」。

差異在於如果使用陣列索引的話「鍵」需要加上「中括號」和「字串引號」,但是物件成員只要加上「小數點」能讓程式碼看起來更加簡潔。

衍生詞語

語法鹽

語法鹽(英語:syntactic salt)指的是不容易寫出壞代碼的語法特性。這些特性強迫程式設計師做出一些基本不用於描述程式行為,而是用來證明他們知道自己在做什麼的額外舉動。

語法糖精

語法糖精(英語:syntactic saccharine),或者說語法糖漿(英語:syntactic syrup),指的是未能讓編程更加方便的附加語法[1][2]

註釋

參考文獻