语法糖 语法盐

来源:互联网 发布:人工智能眼部疾病治疗 编辑:程序博客网 时间:2024/04/30 13:11

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

       举个例子:在C语言里用a[i]表示*(a+i),用a[i][j]表示*(*(a+i)+j)[1]  ,由此可见语法糖不是“现代语言”独有,这种写法简洁明了,容易被人理解。


        语法盐(英语:syntactic salt)是指在计算机语言设计中,不容易产生不良代码的特性。语法盐就像一个程序员必须跳过的圈,来证明他们知道将会发生什么,而不是只表达一个程序行为。

        语法盐可以为容易犯的语法错误加上的额外语法限制,比如类型检查。再比如,有人建议在用end if,,end while等代替统一的end。当然,你要是非常仔细、小心,这些语法盐可能就是多余的,但谁敢夸这个口呢?

       在Java中,在没有额外的语言明确地说明意图的情形下,Java不允许将一个声明为float类型的变量赋值给一个声明为int类型的变量,但是C和C++会自动把float类型的变量缩短并赋值给int类型的变量。

       在C#中,若隐藏一个继承类别的成员,需加上new关键字来说明是有意隐藏此成员,否则会产生一个警告。C语言或C++语言中Switch指令的case中若不加break也不会有错误讯息,因此有潜在错误的可能,C#在switch中未空白的case标记内,若没有goto、return、throw指令,就一定要加break指令(若要像C语言或C++语言一様,一个case后要执行另一个case指令,要加上goto并标示要跳转的标记)。
       语法盐有可能会违背它的初衷,使得代码可读性下降或损害代码质量。在极端条件下,真正有用的代码可能要比为了满足语法盐要求而加的代码还要短。另外一种代替语法盐的方式是在代码非常有可能出错的时候,让编译器产生警告——这也是现代C和C++编译器常见的功能。
      批评者开玩笑说:喜欢语法盐的同志们,一定都是受虐狂——自己没事找事给自己下套玩 。