语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

在计算机科学中,语法糖(syntactic sugar)是指编程语言中可以更容易的表达一个操作的语法,它可以使程序员更加容易去使用这门语言:操作可以变得更加清晰、方便,或者更加符合程序员的编程习惯。

例如,很多编程语言都提供了引用和更新数组的语法;从本质上讲,数组元素的访问即使如下过程:提供一个数组和下标向量,然后调用函数get_array(Array, vector(i, j))。取而代之的是,很多编程语言都提供了如下语法访问数组元素Array[i, j]。同理,更新数组元素可以表达为set_array(Array, vetor(i, j), value),但是很多编程语言都提供如下语法更新数组元素Array[i, j] := value。

具体来说,语法糖是指语言中的一个构件,当去掉该构件后并不影响语言的功能和表达能力。例如,C语言中的标记a[i]就是*(a+i)的语法糖。

语言的处理器,包括编译器,静态分析器等,经常会在处理之前把语法糖构件转换成更加基础的构件,这个过程通常被称为”desugaring”。
语法糖 – 修远的专栏

再补充一个我在学习编译原理过程中碰到的语法糖:

更新补充两个细节:

之所以叫「语法」糖,不只是因为加糖后的代码功能与加糖前保持一致,更重要的是,糖在不改变其所在位置的语法结构的前提下,实现了运行时等价。可以简单理解为,加糖后的代码编译后跟加糖前一毛一样。

之所以叫语法「糖」,是因为加糖后的代码写起来很爽,包括但不限于:代码更简洁流畅,代码更语义自然… 写得爽,看着爽,就像吃了糖。效率高,错误少,老公回家早…

PS: 据说还有一种叫做「语法盐」的东西,主要目的是通过反人类的语法,让你更痛苦的写代码。其实它同样能达到避免代码书写错误的效果,但编程效率应该是降低了,毕竟提高了语法学习门槛,让人咸到忧伤…

我觉着 js 里的对象原型继承有点「咸」,不然 ES6 也不会急着加糖(纯吐槽)

———-

最基本的,for循环就是一个语法糖:

for (var i = 0; i < 5; i++){
    ... 
}

而这个实际上跟while没啥区别:

var i=0;
while (i < 5){
    ...
    i++;
}

简单说,语法糖就是为了避免coder出现错误并提高效率的语法层面的一种优雅的解决方案。