Scala的好处是什么?

Rad*_*adi 35 java scala

我是一名Java开发人员,我想知道如何在Java程序中使用Scala?

oxb*_*kes 39

阅读Daniel Spiewak关于Scala 的精彩博客系列.使用Scala,您可以保留:

  • 所有的Java库
  • 在JVM上运行的所有优点(无处不在,管理工具,分析,垃圾收集等)

但是你可以编写Scala代码:

  • 比Java更简洁明了(特别是使用更多功能样式,例如在集合库中)
  • 它有闭包和功能作为语言的一部分
  • 它有运算符重载(从使用的角度来看)
  • 它有mixins(即包含实现的接口)


Ste*_*lou 17

另外,请看看Scala网站上最近的新闻帖:" 研究:编程风格和生产力 ".

在他的论文中,Gilles Dubochet描述了他如何使用眼动追踪调查编程风格的两个方面.他发现使用for-comprehension和map的算法平均快30%,就像在Scala中那样,而不是那些具有Java迭代while循环的算法.

新闻项目的另一个重要引用:

在Scala为电力贸易公司撰写关键任务项目的Alex McGuire对Scala说:"简洁意味着我可以在一个屏幕上看到更多的程序.你可以得到更好的概述.当我有一些数学模型可以用Java我必须保留两个模型,数学模型本身,第二个模型是如何用Java实现它.使用Scala一个模型,数学模型,将会更有效率."

你读了帖子的其余部分和那里的其他链接项目.


cla*_*lay 12

从我有限的经验中,我可以用非常简单的语言命名一些极其明确的观点:

  1. 属性.C++和Java有一个公共getter/setter函数"property"的概念,它包含了一个内部类变量,导致了大量的样板代码.C#将其形式化为一种真正的语言特性,并通过自动实现的属性减少了C#3.0中的大部分样板.Scala类将简单属性定义为常规只读val或读/写变量.该类可能稍后选择使用get或get/set方法替换它们而不影响客户端代码.为此,Scala提供了最优雅的解决方案,具有最少的语言功能和复杂性.

  2. 数组使用常规泛型.在Java/C#中,泛型作为一种思想被拴在一起,并且是完全独立的但是与数组有重叠的行为.

  3. Scala具有不变的"val"作为一流的语言特征.实际上,val类似于Java最终变量:顶部引用是不可变的,但内容可能会发生变异.

  4. Scala允许块,for-yield循环和大括号中的代码返回一个值.在许多情况下,这是非常优雅的.一个非常小的优点是,这消除了对单独的三元运算符的需求.

  5. Scala具有单例对象而不是C++/Java/C#类静态.这是一个更清洁的解决方案

  6. 模式匹配.对象拆包.在很多情况下非常好.

  7. 原生元组.

  8. 持久不可变集合是默认集合并内置于标准库中.


Von*_*onC 6

我不确定您是否可以在Java程序中轻松使用Scala,例如"从Java类调用Scala类".

您可以按照" 混合Java和Scala "一文进行尝试.
相关摘录:

问题是Java和Scala编译步骤是分开的:您不能一次编译Java和Scala文件.
如果您的Java文件都没有引用任何Scala类,则可以先编译所有Java类,然后编译Scala类.
或者,如果您的Scala文件都没有引用任何Java类,那么您可以反过来这样做.
但是,如果您希望Java类可以访问您的Scala类,并且Scala类也可以访问您的Java类,那就是一个问题.

Scala代码可以很容易地直接调用Java代码,但有时从Java代码调用Scala代码比较棘手,因为从Scala到字节码的转换并不像Java那么简单:
有时Scala编译器会在符号中添加字符或进行其他更改从Java调用时必须显式处理.
但是Scala类可以实现Java接口,并且该类的实例可以传递给期望接口实例的Java方法.
然后,Java类在该实例上调用接口方法,就像它是Java类实例一样.

当然,正如Danup Spiewak的Roundup:Scala for Java Refugees所述,情况正好相反.