Java应用程序的哪些部分应该使用Scala编写?

6
我正在使用Struts 2编写Java应用程序,但现在我想将其变成混合Java和Scala项目。我对Scala没有太多经验,但几年前在大学学习了Haskell - 我真的很喜欢函数式编程范例,但当然在课堂上我们只得到了一些非常适合函数式解决方案的问题!在现实世界中,我认为某些代码更适合采用命令式风格,并且我希望继续使用Java进行编码(我知道Scala支持命令式语法,但我还没有准备好走纯Scala项目的方向)。
在混合项目中,如何决定在Java和Scala中编写什么代码?
4个回答

10

两点:

  1. 99%的Java代码可以用Scala表达。
  2. 您可以编写支持混合Java+Scala编译的项目。您的Scala代码可以调用您的Java代码,您的Java代码也可以调用您的Scala代码。(如果您想要后者,建议在Java中定义接口,然后在Scala中实现它。否则,从Java调用Scala代码可能会有些棘手。)

所以答案是:您想要的任何部分。您的Scala代码不需要是纯函数式的。您的Scala代码可以调用Java库。因此,几乎任何您可以用Java编写的部分都可以用Scala编写。

现在,还有一些更实际的考虑。当首次尝试Scala时,有些人选择相对孤立的、非关键任务的程序部分来编写Scala代码。如果您喜欢这种方法,单元测试是一个不错的选择。

如果您熟悉Java并且之前学过Haskell,我建议将Scala视为“更好的Java”。从根本上讲,Scala编译成JVM字节码,与Java输出的非常非常相似。唯一的区别是Scala更“高效”:每行代码产生的字节码比Java多。Scala与Haskell有很多共同点(一级函数,for-comprehensions类似于Haskell的do-notation,有限的类型推断),但也非常不同(默认情况下不是惰性的,不是纯函数式的)。因此,您可以使用Haskell的一些见解来启发您的Scala风格,但在“底层”,它都是Java字节码。


6
在回答你的问题时,我建议你在涉及大量集合操作或处理XML的任何代码中使用Scala编写。
Scala的集合库是Scala最重要的函数特性,通过使用它,您将体验到很大的LoC减少。是的,有Java替代方案,比如Google的集合库,但您问的是应该用Scala编写什么。 :-)
Scala还具有本地处理XML的功能。如果您尝试将DOM代码带到Scala上运行,可能会发现过渡困难。但是,如果您尝试从Scala的角度和问题的角度来解决问题,并为Scala从头编写代码,您将获得收益。
我建议您也使用Actors,但我不确定您能否将其与Java上的Struts 2代码集成。但如果您有并发代码,请考虑使用Scala中的Actors。

5

也许听起来有些傻,但为什么不用Scala编写整个项目呢?它是一种比Java更具表现力的精彩语言,同时还可以保持对现有Java库的二进制兼容访问。


3

请针对您的项目提出以下问题:“哪些操作需要副作用?”和“Java库已经很好地覆盖了哪些功能?”然后在Scala中实现其余部分。

然而,我要警告的是,混合项目本质上比独立项目更困难,因为您需要使用多种语言/环境。所以考虑到您声称对Scala没有太多经验,我建议您先玩一些玩具项目,也许是您完整目标的子集。这也会让您感受到应该发生分歧的地方。


点已经被接受了...幸运的是这是一个家庭项目,所以我可以将其作为学习经验来利用。如果它被证明成功,我一定会考虑在办公室中宣传Scala。 - Todd Owen
是的,我同意。多语言项目非常棘手。我们这里也正在经历同样的问题。 - Joshua Partogi
其实我是JVM+<插入新语言>的粉丝... 我只是想指出,为了有效地做到这一点,最好先学习在一个100%的<插入新语言>项目上工作。 - Timothy Pratley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接