Tod*_*wen 6 java interop scala
我正在使用Struts 2编写Java应用程序,但现在我想将它改为混合Java和Scala项目.我对Scala没有多少经验,但几年前我在大学时学过Haskell - 我真的很喜欢功能性编程范例,但当然在课堂上我们只能给出非常适合功能性解决方案的问题!在现实世界中,我认为一些代码更适合命令式样式,我想继续使用Java(我知道Scala支持命令式语法,但我还没准备好朝着纯Scala项目的方向发展) (还).
在混合项目中,如何决定用Java编写代码以及在Scala中编码什么?
Jor*_*tiz 10
两件事情:
所以答案是:你想要的任何部分.您的Scala代码不需要纯粹功能.您的Scala代码可以调用Java库.所以你可以用Java编写的任何部分都可以用Scala编写.
现在,一些更实际的考虑因素.当第一次尝试使用Scala时,有些人会选择相对孤立的非任务关键部分来编写Scala.如果您喜欢这种方法,单元测试是一个很好的选择.
如果您熟悉Java并且过去曾学过Haskell,我建议将Scala视为"更好的Java".从根本上说,Scala编译为与Java输出非常非常相似的JVM字节码.唯一的区别是Scala更"高效":每行代码产生的字节码比Java更多.Scala与Haskell有很多共同之处(一等函数,for-comprehensions就像Haskell的do-notation,有限类型推理),但它也非常不同(默认情况下它不是懒惰的,它不是纯粹的).因此,您可以使用Haskell的一些见解来激发您的Scala风格,但"引擎盖下"它是所有Java字节码.
根据您的问题的精神,我建议您在Scala中编写任何涉及对集合进行大量操作或处理XML的代码.
Scala的集合库是Scala最重要的功能特性,通过它的使用,您将体验到大量的LoC减少.是的,有Java备选方案,例如Google的集合库,但您询问了您应该在Scala中编写的内容.:-)
Scala还具有XML的本机处理功能.如果您尝试使用DOM代码并使其在Scala上运行,您可能会发现转换很困难.但是,如果您尝试解决问题和Scala透视图并从头开始为Scala编写,那么您将获得收益.
我也建议使用Actors,但我不确定你能用Java上的Struts 2代码集成它.但是如果你有并发代码,那就给Scala中的Actors一个想法吧.
对您的项目提出以下问题:“哪些操作需要副作用?” 以及“Java 库已经很好地涵盖了哪些功能?” 然后在 Scala 中实现其余部分。
不过,我要警告的是,混合项目本质上比独立项目更困难,因为您需要使用多种语言/环境。因此,鉴于您声称对 Scala 没有太多经验,我建议您首先尝试一些玩具项目,也许是您完整目标的一部分。这也会让你感觉到分歧应该发生在哪里。