Java应用程序的哪些部分应该用Scala编写?
我正在使用Struts2编写一个Java应用程序,但现在我想将它变成一个Java和Scala的混合项目。我对Scala没有太多的经验,但我在几年前的大学里学到了Haskell——我真的很喜欢函数编程范式,但当然在课堂上,我们只得到了非常适合函数解决方案的问题!在现实世界中,我认为一些代码更适合命令式风格,我想继续使用Java来实现这一点(我知道Scala支持命令式语法,但我还没有准备好向纯Scala项目的方向发展)Java应用程序的哪些部分应该用Scala编写?,java,scala,interop,Java,Scala,Interop,我正在使用Struts2编写一个Java应用程序,但现在我想将它变成一个Java和Scala的混合项目。我对Scala没有太多的经验,但我在几年前的大学里学到了Haskell——我真的很喜欢函数编程范式,但当然在课堂上,我们只得到了非常适合函数解决方案的问题!在现实世界中,我认为一些代码更适合命令式风格,我想继续使用Java来实现这一点(我知道Scala支持命令式语法,但我还没有准备好向纯Scala项目的方向发展) 在混合项目中,如何决定用Java编写什么以及用Scala编写什么?针对您的项目提
在混合项目中,如何决定用Java编写什么以及用Scala编写什么?针对您的项目提出以下问题: “哪些操作需要副作用?”和“Java库已经很好地涵盖了哪些功能?”然后在Scala中实现其余部分 然而,我要警告的是,混合项目本质上比独立项目更困难,因为您需要使用多种语言/环境。因此,考虑到您声称对Scala没有太多经验,我建议您先玩一些玩具项目,也许是您全部目标的一个子集。这也会让你感觉到分歧应该发生在哪里。两件事:
如果您熟悉Java并在过去学习过Haskell,我建议将Scala视为“更好的Java”。从根本上说,Scala编译成的JVM字节码非常非常类似于Java输出的字节码。唯一的区别是Scala更“高效”:它每行代码产生的字节码比Java多。Scala与Haskell有很多共同之处(第一类函数,因为理解类似于Haskell的do表示法、有限类型推理),但它也有很大的不同(默认情况下它不是懒惰的,它不是纯粹的)。因此,您可以使用Haskell的一些见解来启发您的Scala风格,但“幕后”都是Java字节码。出于您问题的精神,我建议您使用Scala编写任何涉及大量操作集合或处理XML的代码 Scala的集合库是Scala最重要的功能特性,通过使用它,您将体验到极大的LoC减少。是的,有Java的替代方案,比如Google的collection library,但是您问应该用Scala写些什么。:-) Scala还具有XML的本机处理。如果您尝试使用DOM代码并使其在Scala上工作,您可能会发现转换很困难。但是,如果您尝试处理这个问题和Scala透视图,并从头开始为Scala编写它,您将获得收益
我也建议使用Actors,但我不确定在Java上如何将其与Struts 2代码集成。但如果您有并发代码,请考虑一下Scala中的参与者。这听起来可能很愚蠢,但为什么不用Scala编写整个项目呢?这是一种很棒的语言,在保持对现有Java库的二进制兼容访问的同时,它的表现力远比Java强。重点是……幸运的是,它是一个家庭项目,所以我可以利用它作为一种学习体验。如果它证明是成功的,我当然会考虑在办公室里传授斯卡拉。是的,我同意。多语言项目是非常有问题的。我们在这里也经历了同样的事情。实际上我是JVM+的粉丝。。。我只是想指出,为了有效地做到这一点,首先学习100%的项目要简单得多。