Java具有闭包后的Scala优势[已关闭]

2022-09-01 21:32:41

随着Java中添加了闭包,Scala作为语言选择与Java相比有什么优势?

有人可以详细说明任何优势吗?


答案 1

除了闭包(Java看起来并不那么接近),这里有一个Scala中Java中缺少的功能列表。我将省略这里的库,并专注于语言本身的功能。这无论如何都不全面,但我认为它包含了大票项目。

  • 隐式参数/转换
  • 模式匹配,案例类
  • 类型推断(部分)
  • 高级类型(基于类型构造函数的抽象)
  • 单一理解for
  • 差异注释
  • 具有行为(特征)的接口
  • 默认参数和命名参数
  • 统一的方法和运算符(方法可以用作中缀运算符,运算符可以重载,因为它们只是方法)
  • 统一类型层次结构;无基元类型
  • 属性,而不是 getter 和 setter
  • 抽象值
  • 一流的不可变引用(s 和 s 一样容易声明)valvar
  • 按名称(懒惰)术语(也许Java闭包会使它变得相当容易表达)
  • 一些尾部调用递归优化
  • 抽象类型
  • 类型别名
  • 自类型
  • 路径依赖类型
  • 结构类型
  • 类型归因,与类型转换的区别
  • 重命名导入
  • 一流的模块(对象)
  • 一流的套餐
  • 已初始化的泛型(清单)
  • 带分隔符的延续

这些构建基块启用的一些很酷的辅助构造:

  • 类型类(通过隐式参数和高级类型)
  • 皮条客我的图书馆”模式(通过隐式转换)
  • 内部 DSL(通过运算符重载和中缀方法)
  • 解析器组合器(由高阶函数启用,并通过中缀方法变得漂亮)
  • 生成器、协程、自定义控制结构(通过分隔的延续)
  • 类型级编程(通过高级类型和抽象类型)
  • 依赖关系注入框架的过时(通过蛋糕模式)

最后,我要提到Scala有一个REPL(read-evaluate-print-loop)——这并不是该语言本身的一个特性,但它非常好!


答案 2

即使Java 7 [8,..]有一天会有一流的功能,它仍然缺乏隐式,类型推断,强大的集合库,模式匹配,特征和许多其他提高生产力的东西。不谈各种Actor库,构建DSL的丰富能力,...