语法糖简介
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
在计算机科学中,语法糖(Syntactic sugar)是指编程语言中可以更容易的表达一个操作的语法,它可以使程序员更加容易去使用这门语言:操作可以变得更加清晰、方便,或者更加符合程序员的编程习惯。
就相当于汉语里的成语。用更简练的言语表达较复杂的含义。在得到广泛接受的情况之下,可以提升交流的效率。
之所以叫「语法」糖,不只是因为加糖后的代码功能与加糖前保持一致,更重要的是,糖在不改变其所在位置的语法结构的前提下,实现了运行时的等价。可以简单理解为,加糖后的代码编译后跟加糖前一模一样。
基本解释
实际上从面向过程到面向对象也是一种语法糖,C 语言可以通过它的指针、类型转换、结构体,实现面向对象的编程风格,但是 C++ 更进一步的推广了这种风格,更加易用,不过到了 C# 把(面向对象)OO 的风格发挥得淋漓尽致。OO 的编程风格对于面向过程来说是不是一种语法糖呢?如果生硬地照此理解,只有计算机硬件指令才不算语法糖,而其他一切利用编译器、汇编器将代码抽象,和自然语言更相近的手段都算语法糖。
对于机器语言,任何比他高级的语言都是语法糖,比如汇编语言,高级语言。
对于汇编语言,任何比他高级的语言都是语法糖,比如高级语言。
对于面向过程的语言,面向对象的语言都是语法糖。
Java中的语法糖
语法糖的存在主要是方便开发人员使用。但其实,Java 虚拟机并不支持这些语法糖。这些语法糖在编译阶段就会被还原成简单的基础语法结构,这个过程就是解语法糖。
com.sun.tools.javac.main.JavaCompiler 中的 deSugar 方法,负责解语法糖的实现。
Java 中的语法糖只存在于编译期,在编译器将 .java 源文件编译成 .class 字节码时,会进行解语法糖操作,还原最原始的基础语法结构。这些语法糖包含条件编译、断言、Switch 语句与枚举及字符串结合、可变参数、自动装箱/拆箱、枚举、内部类、泛型擦除、增强 for 循环、lambda 表达式、try-with-resources 语句、JDK10 的局部变量类型推断等等。
需要声明的是“语法糖”这个词绝非贬义词,它可以给我们带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。
参考:
https://www.zhihu.com/question/20651624
https://www.jianshu.com/p/777b10385524