Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java应用程序的哪些部分应该用Scala编写?_Java_Scala_Interop - Fatal编程技术网

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

Java应用程序的哪些部分应该用Scala编写?,java,scala,interop,Java,Scala,Interop,我正在使用Struts2编写一个Java应用程序,但现在我想将它变成一个Java和Scala的混合项目。我对Scala没有太多的经验,但我在几年前的大学里学到了Haskell——我真的很喜欢函数编程范式,但当然在课堂上,我们只得到了非常适合函数解决方案的问题!在现实世界中,我认为一些代码更适合命令式风格,我想继续使用Java来实现这一点(我知道Scala支持命令式语法,但我还没有准备好向纯Scala项目的方向发展) 在混合项目中,如何决定用Java编写什么以及用Scala编写什么?针对您的项目提

我正在使用Struts2编写一个Java应用程序,但现在我想将它变成一个Java和Scala的混合项目。我对Scala没有太多的经验,但我在几年前的大学里学到了Haskell——我真的很喜欢函数编程范式,但当然在课堂上,我们只得到了非常适合函数解决方案的问题!在现实世界中,我认为一些代码更适合命令式风格,我想继续使用Java来实现这一点(我知道Scala支持命令式语法,但我还没有准备好向纯Scala项目的方向发展)


在混合项目中,如何决定用Java编写什么以及用Scala编写什么?

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

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

两件事:

  • 99%的Java代码可以用Scala表示
  • 您可以编写支持混合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有很多共同之处(第一类函数,因为理解类似于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%的项目要简单得多。