关注“剧本屋”,和百万开发者呆在一起
句法糖
语法糖,也译作糖衣语法,是英国计算机科学家彼得·j·兰丁发明的一个专业术语。是指添加到计算机语言中的某种语法,对语言的功能没有影响,但更方便程序员使用。
类比就像一些缩写、昵称或“俚语”、“暗语”等。他们都用更简洁的语言表达复杂的意思。
比如我们有些人说“不要大惊小怪,这只是基本操作”,表现出一种低调的骄傲。
当我们描述一个妹子的时候,可以说她“咸但是甜”等等。
通过使用这些暗语和俚语,我们可以起到很多作用,比如更简洁、更自然、更高效、更少出错。
在编程语言中引入语法糖还可以使代码更加简洁,提高代码的可读性,提高编程效率,降低程序出错的概率。
有了暗语和俚语,人们可以更顺畅地交流,有了语法糖,程序员可以更愉快地写代码。是一个道理。
语法糖
就像我们日常说的一些“暗语”、“俚语”,这些都是为了方便人们而发明的,但并不是每个人都能听懂。
在能听懂的人中间用词很方便,但如果有人不懂,就需要解释。
如果你阅读Java虚拟机的源代码,你会发现编译过程中很重要的一个步骤就是调用desugar,它负责语法糖的实现。
通常我们可以通过反编译来学习如何实现语法糖。
Java中的语法糖
Java作为一种高级语言,语法糖很多,从Java 7开始,几个重要版本提供的新特性都和语法糖有关。
渐渐地,Java从低糖语言变成了高糖语言。
例如,switch支持枚举和字符串、泛型、条件编译、断言、变量参数、自动装箱/拆包、枚举、内部类、增强For循环、try-with-resources语句、lambda表达式等等。
还有JDK 10中的局部变量类型推断和JDK 13中的文本块,本质上其实是语法糖。
关于Java中的语法糖,霍利斯写了很多张文深入介绍他们的原理,比如“不知道这12个语法糖,不说你懂Java”,“我反编译了Java 10个局部变量类型推断”等等。
提取一段关于交换机支持字符串的分析过程如下:
Java中的Swith最初支持基本类型。例如int、char等。对于int类型,直接比较值。对于字符类型,比较它们的ascii码。
所以对于编译器来说,switch中只能使用整数,任何类型的比较都必须转换成整数。比如字节。Short、char和int。
看开关对String的支持。有以下代码:
publicclassswitchDemoString {
publicstaticvoidmain {
String str = " world
开关{
case“hello”:
系统。out.println
打破;
案例“世界”:
系统。out.println
打破;
默认:
打破;
}
}
}
反编译的内容如下:
publicclassswitchDemoString
{
publicswitchDemoString
{
}
publicstaticvoidmain
{
String str = " world
字符串s;
switch.hashCode)
{
默认:
打破;
案例99162322:
if)
系统。out.println
打破;
案例113318802:
if)
系统。out.println
打破;
}
}
}
看看边后面的代码,可以发现字符串的切换是通过equals和hashCode方法实现的。
其他语法糖这里就不详细介绍了,有兴趣的可以借鉴H的文章。总之学习思路很相似,就是如何通过反编译解码糖后理解代码或者字节码。
1.《语法糖 漫话:如何给女朋友解释什么是语法糖?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《语法糖 漫话:如何给女朋友解释什么是语法糖?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/764111.html