java - Java 8 上下文中的 "sugar"、 "desugar"术语是什么?

标签 java semantics java-8

我在 Java 8 中经常听到“加糖”和“脱糖”,这些术语是什么意思?它们是概念性的还是句法性的。

一些例子:

Default iterated loop resugaring to java

Observations about syntactic sugar in compilation.

最佳答案

sugar,在编程中,通常是指那些 sweet 添加,主要是快捷方式,使某些结构更易于键入和阅读(后者实际上是,在程序的生命周期中最重要)。

维基百科有一个定义 syntactic sugar但是您应该注意,本质上,并非所有的糖都是语法的(并非所有最近的甜蜜添加都只是编译器的更改)。

这里有几个例子:

  • 后缀和前缀递增运算符(i++++i)。他们的唯一目的是避免写额外的声明。它们是纯糖。
  • +=|=&=等都是由同一种糖制成的。
  • 原始类型和对象之间的隐式转换也是糖。
  • 类型推断也是糖。
  • Java 8 附带的 Lambda 表达式是另一种糖(这个不仅仅是语法)

Java 被广泛认为不够简洁,尤其是与现代语言相比。这就是为什么那些有助于使代码更快阅读的添加受到欢迎的原因。

最后,我只想指出,虽然缺少糖会使您的程序变胖,但过多的糖会导致编写相同内容的多种不同方式,这会使您的语言变得令人不安,并且您的程序不那么连贯和更难维护。另一种糖,API 糖,通常是一种瘟疫,它使 API 更难掌握,尤其是当它由添加(例如重载)组成时。

话虽如此,desugaring 指的是

  • 删除语言中所有多余内容的过程
  • 代码处理器找出含糖语句背后的内容的过程(例如,这可能涉及类型推断)

关于java - Java 8 上下文中的 "sugar"、 "desugar"术语是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22060894/

相关文章:

Java 8 与流中的过滤器相反

java - 如何用java迭代每n个元素?

java - Hibernate+PostgreSQL "Too Many Connections"错误

java - Spring AOP : "no declaration can be found for element ' aop:config' "

java - Eclipse 看不到文件,即使它在包中

ios - 变量/常量声明差异

java - 展平集合中的集合以获得单个 List<>

java - 在 .bash_profile 中设置 JAVA_HOME 未返回正确的路径

HTML 表格 td 含义

sql - 何时选择通过SQL/语义存储解决方案选择Cassandra?