Java关闭后的Scala优势
随着闭包被添加到Java,Scala比Java作为语言选择的优势是什么?
有人可以详细说明任何优势吗?
除了闭包(Java看起来并不是那么接近)之外,这里是Java中缺少的Scala中的function列表。 我将在这里省略库,并专注于语言本身的function。 这无论如何都不全面,但我认为它包含大件物品。
- 隐含参数/转换
- 模式匹配,案例类
- 类型推理(一些)
- 高级类型 (类型构造函数的抽象)
- Monadic
for
理解 - 方差注释
- 与行为(特征)的接口
- 默认和命名参数
- 统一方法和运算符(方法可以用作中缀运算符,运算符可以重载,因为它们只是方法)
- 统一类型层次; 没有原始类型
- 属性而不是getter和setter
- 抽象的价值观
- 一等不可变引用(
val
s很容易声明为var
s) - 按名称(懒惰)术语(也许Java闭包会使这个相当容易表达)
- 一些尾调用递归优化
- 抽象类型
- 键入别名
- 自我类型
- 路径依赖类型
- 结构类型
- 类型归属 ,与类型转换不同
- 重命名导入
- 一流的模块(对象)
- 一流的套餐
- 具体化的仿制品( 清单 )
- 定界延续
这些构建块支持的一些很酷的辅助构造:
- 类型类(通过隐式参数和更高级的类型)
- “ 皮条客我的图书馆”模式(通过隐式转换)
- 内部DSL(通过运算符重载和中缀方法)
- 解析器组合器(由高阶函数启用并通过中缀方法实现)
- 生成器,协同程序,自定义控制结构(通过分隔的延续)
- 类型级编程(通过更高级和抽象类型)
- dependency injection框架的过时(通过Cake Pattern )
最后,我会提到Scala有一个REPL(读取 – 评估 – 打印 – 循环) – 这不是语言本身的一个特性,但它非常好!
即使Java 7 [8,..]有一天会有一流的function,它仍然缺乏implicits,类型推断,强大的Collections库,模式匹配,特性和许多其他提高生产力的东西。 不是谈论各种Actor库,丰富的构建DSL的能力,……
我听到的最新消息是闭包不会进入Java 7。
http://www.baptiste-wicht.com/2010/09/jdk-7-features-updated-plan-b-is-apparently-here/
http://openjdk.java.net/projects/jdk7/features/
第二个链接清楚地将项目Lambda(闭包)列为推迟到JDK 8。