代码之家  ›  专栏  ›  技术社区  ›  Todd Owen

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

  •  6
  • Todd Owen  · 技术社区  · 16 年前

    我正在使用Struts 2编写一个Java应用程序,但现在我想把它变成一个混合Java和Scala项目。我对scala没有太多的经验,但是我几年前在大学里学到了haskell——我真的很喜欢功能编程范式,但是当然在课堂上,我们只会遇到非常适合功能解决方案的问题!在现实世界中,我认为有些代码更适合于命令式,并且我希望继续使用Java(我知道斯卡拉支持命令式语法,但我还没有准备好去纯纯Scala项目的方向)。

    在一个混合项目中,如何决定Java中的代码和Scala中的代码?

    4 回复  |  直到 16 年前
        1
  •  3
  •   Timothy Pratley    16 年前

    对你的项目提出以下问题: “什么手术需要副作用?”“什么功能已经被Java库所覆盖?”然后在scala中实现其余部分。

    不过,我要警告的是,由于需要使用多种语言/环境,混合项目从本质上来说比独立项目更困难。所以,鉴于你对scala的经验不多,我建议你先玩一些玩具项目,也许是你全部目标的一部分。这也会给你一个分水岭应该在哪里发生的感觉。

        2
  •  10
  •   Jorge Ortiz    16 年前

    两件事:

    1. 99%的Java代码可以用Scala表示
    2. 可以编写支持混合Java+Scala编译的项目。您的Scala代码可以调用Java代码,Java代码可以调用Scala代码。(如果您想做后者,我建议在Java中定义接口,然后在斯卡拉中实现它。否则,从Java调用Scala代码可能会有点难看。

    所以答案是:无论你想要什么部分。您的scala代码不需要是纯功能的。您的Scala代码可以调用Java库。你可以用Java编写的任何部分都可以用斯卡拉编写。

    现在,一些更实际的考虑。当第一次尝试scala时,有些人会选择程序中相对孤立的、非任务关键的部分来用scala编写。如果您喜欢这种方法,单元测试是一个很好的候选者。

    如果你熟悉Java,并且在过去学习过Haskell,我建议把斯卡拉当作一个“更好的Java”。从根本上讲,斯卡拉编译成非常类似Java输出的JVM字节码。唯一的区别是斯卡拉更“有生产力”:它产生的字节码比Java代码多。scala与haskell有很多共同之处(第一类函数,因为理解类似于haskell的do符号,有限的类型推理),但它也非常不同(默认情况下,它不是懒惰的,也不是纯粹的)。因此,您可以使用Haskell的一些见解来激发您的Scala风格,但是“在引擎盖下”,它都是Java字节码。

        3
  •  6
  •   Daniel C. Sobral    16 年前

    本着您的问题精神,我建议您在scala中编写任何涉及对集合进行大量操作或处理XML的代码。

    scala的集合库是scala最重要的功能特性,通过使用它,您将体验到极大的loc减少。是的,有Java替代品,比如谷歌的收藏库,但是你问你应该用斯卡拉写什么。:-)

    scala还具有对XML的本地处理。如果尝试使用DOM代码并使其在scala上工作,您可能会发现转换很困难。但是,如果您尝试处理这个问题和scala透视图,然后从头开始为scala编写它,您将获得收益。

    我也建议使用演员,但我不确定你能把它与Struts 2代码集成在Java上。但是如果您有并发代码,请考虑一下scala中的参与者。

        4
  •  5
  •   David Crawshaw    16 年前

    听起来可能很傻,但为什么不写你的 整个项目 在斯卡拉?这是一种奇妙的语言,它比Java更具表现力,同时保持对现有Java库的二进制兼容访问。

    推荐文章