美文网首页
Java中的语法糖

Java中的语法糖

作者: 老程不秃 | 来源:发表于2022-04-16 13:56 被阅读0次

微信公众号:差点儿码不动

关注点击菜单栏“ Java进阶”, 重磅干货,第一 时间到手!🌹

如果觉得文章对你有帮助,欢迎大家关注,点赞,转发😉

什么是语法糖(Syntactic sugar)

语法糖是一个计算机数据,特指在编程语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。

糖嘛,对应的词汇就是甜。而语法糖就是让你的代码更甜🐶。

实际上就像上面介绍的,如果可以将语句中的一些构造从语句中删除而不影响语言的功能,那么它就是语法糖。

Java中常见的语法糖


复合赋值运算符是赋值运算符的语法糖

x += 1 对应 x = x + 1

x -= 1 对应 x = x - 1

递增/递减运算符是复合赋值运算符的语法糖

x++ 代替 x += 1

x-- 代替 x -= 1

三元运算符是If-then-else语句的语法糖

(条件?满足:否则)

增强型 For 循环是 For 循环的语法糖,带有一个迭代器

for (String str:arrayList) {

}

上面的增强for循环是下面带有迭代器的 for 循环的语法糖

for (Iterator<String> it = arrayList.iterator(); it.hasNext();) {

  String str = it.next();

  // Implementation logic

}

划重点


去糖化

语言处理器,包括编译器和静态分析器,通常在处理之前将糖化结构扩展为更基本的结构,这个过程有时称为“去糖化”。例如,增强的 for 循环将在编译时被取消为带有迭代器的 for 循环。

语法糖和运行时异常

重要的是要了解糖化和去糖化,因为糖化结构会根据其去糖化结构引发某些运行时异常。

举个例子:

大家都知道不能在增强for循环中进行集合的增删操作,否则会抛异常。

是因为增强的 For 循环在迭代Collection 时,使用Collection remove()方法从 Collection 中删除元素时抛出java.util.ConcurrentModificationException 。

虽然在迭代集合时从集合中移除元素(使用集合 remove() 方法)时,带有计数器的通用 for 循环不会抛出java.util.ConcurrentModificationException 。

这是因为在编译时,增强的 for 循环被去糖化,转换成具有Fail-fast 迭代器的通用 for 循环。

Fail-fast 迭代器在迭代Collection 时从 Collection 中移除元素(使用Collection remove() 方法)时抛出java.util.ConcurrentModificationException。

再聊点有趣的:语法盐(syntactic salt)

语法盐是指为了降低开发者写出不良代码的设计。举个简单例子,在C语言和C++的Switch中,如果case语句不加break,编译器并不会产生错误信息。还有一些程序员认为定义变量类型也是语法盐的一种。

再举个例子,在Java当中,不允许将float类型的变量赋值给定义为int类型的变量,但是在C或者C++当中,会自动把float类型的变量舍去小数并赋值给int类型的变量。

int num1;

float pi=3.14159;

num1=pi;  //賦值錯誤复制代码

语法盐有可能会违背它的初衷,使代码的可读性降低或浪费代码的空间占用。在极端条件下,真正有用的代码可能要比为了满足语法盐要求而增加的代码还要短。

另外一种替代语法盐的方法是在代码可能产生错误时,让编译器产生警告——这也是C和C++的编译器常见的作法。

相关文章

  • 关于语法糖的一些粗鄙之见

    ABCDEFGZ A丨思维逻辑 糖 --> 语法糖 --> 衍生词语 --> java 中的语法糖 --> ...

  • Java中泛型和通配符

    Java中泛型:java语法糖: 语法糖的是一个专业术语,指的是计算机语言中的某一种语法,这个种语法并不会影响语言...

  • Java中的语法糖

    几乎各种语言都会或多或少的提供一些语法糖来方便程序员的代码开发,这些语法糖虽然不会提供实质性的功能改进,但是他们或...

  • Java中的语法糖

    语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·兰丁发明的一个术语,指计算机语...

  • Java中的语法糖

    语法糖 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin ...

  • Java中的语法糖

    微信公众号:差点儿码不动关注点击菜单栏“Java进阶”, 重磅干货,第一 时间到手!?如果觉得文章对你有帮助,欢迎...

  • Java语法糖汇总解析

    Java语法糖: 语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某种语法,这种语法...

  • Java语法糖(1):可变长度参数以及foreach循环原理

    语法糖 接下来几篇文章要开启一个Java语法糖系列,所以首先讲讲什么是语法糖。语法糖是一种几乎每种语言或多或少都提...

  • Java 泛型 和Type体系

    Java泛型 在Java中,泛型技术实际上只是Java 语言的一颗语法糖,它只存在于程序的源代码中(*.java文...

  • Java中的增强 for 循环 foreach

    foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特...

网友评论

      本文标题:Java中的语法糖

      本文链接:https://www.haomeiwen.com/subject/kdrqertx.html