Java 我应该学习Scala吗? 我是一个经验丰富的C++程序员,具有Python的平均技能。我首先学习Python的原因是: 从不同的角度看待编程(静态与动态、解释与编译等) 增加我可以从事的项目的广度(Python允许我进行web开发、为Symbian手机开发或编写快速系统管理脚本) 以补充我的C++技巧。

Java 我应该学习Scala吗? 我是一个经验丰富的C++程序员,具有Python的平均技能。我首先学习Python的原因是: 从不同的角度看待编程(静态与动态、解释与编译等) 增加我可以从事的项目的广度(Python允许我进行web开发、为Symbian手机开发或编写快速系统管理脚本) 以补充我的C++技巧。,java,scala,jvm-languages,Java,Scala,Jvm Languages,我认为Python很棒,我相信我已经实现了上述目标。我将继续在小项目、脚本和web开发中使用它 不过,我怀疑我能否将其用于中大型项目。虽然动态类型很方便,但它允许某些我认为令人不安的bug。单元测试和linting可以缓解这个问题,但是静态类型可以完全消除它 在研究了一些编程语言之后,我认为Scala看起来是一个很好的候选者: 我喜欢类型推断,它在JVM上运行,因此它应该在JVM可用的任何地方都可用。在使用函数式编程时,我还可以学到更多有关函数式编程的知识 但是。。。我也有一些疑问,这就是我希望

我认为Python很棒,我相信我已经实现了上述目标。我将继续在小项目、脚本和web开发中使用它

不过,我怀疑我能否将其用于中大型项目。虽然动态类型很方便,但它允许某些我认为令人不安的bug。单元测试和linting可以缓解这个问题,但是静态类型可以完全消除它

在研究了一些编程语言之后,我认为Scala看起来是一个很好的候选者: 我喜欢类型推断,它在JVM上运行,因此它应该在JVM可用的任何地方都可用。在使用函数式编程时,我还可以学到更多有关函数式编程的知识

但是。。。我也有一些疑问,这就是我希望Stack Overflow社区能够提供帮助的地方:

  • 可移植性:至少我希望是Linux和Windows。那手机呢,有可能让它在那里运行吗
  • C++兼容性:我能将C++代码与斯卡拉混合吗?(JNI?)
  • 编程范例:现在我对切换到函数式编程(FP)感到不舒服。我是否可以先将面向对象和过程与某些FP结合使用,然后在学习时更改比例
  • 工具链成熟度:您对IDE和调试器有何经验?我现在正在使用Eclipse,看起来还可以
  • 学习速度:考虑到我的经验,你认为我用Scala达到可行水平的速度有多快
  • 部署:您究竟如何部署Scala程序?它是一个jar,它是一个可执行文件吗

最后,您认为Scala的一些缺点是什么?

Scala是一种值得投资的不断发展的语言,特别是如果您来自Java世界。Scala在网站上被广泛报道。从Bill Venners那里可以看到这一点,也可以读到a

关于你的问题:

  • Java可以在任何有JVM的地方运行。然而,手机的运气并不好。您需要的是完整的JRE,而不是可用的子集
  • 这在JNI中是可能的。如果Java可以实现某些功能,那么Scala也可以。Scala可以调用Java类
  • 函数式编程是Scala的一个优点-您确实需要学习它。但是,您也可以在不充分利用它的情况下开始使用它,并按照自己的方式使用它
  • 有一个Eclipse插件。这不是最好的,但它会起作用。更多细节
  • 如果你有经验,我会说真的很快。我建议你先找一本书
  • 有关部署,请参阅此条目

事实上,如果我是你,我会学习编程范例而不是语言。当然,你必须学习一种范例语言来研究范例。了解不同范例的缺点和优点可以让您从不同的角度看待问题,并使您成为一名更好的程序员(即使使用您已经知道的语言)

如果需要的话,选择一种已知范例的语言是一项相对容易的任务。因为Scala是FP(至少你提到过),C++/Python是OOP,所以我认为它是一种很好的语言

编程范例:现在我对切换到FP感到不舒服。我可以先将OO和过程与一些FP一起使用,然后在学习时更改比例吗

Scala完全支持命令式编程,编写没有FP元素的程序很容易(不过,FP很有用,值得学习)

学习速度:考虑到我的经验,你认为我用Scala达到可行水平的速度有多快

快点。Scala中有许多有趣的特性,这些来自C++、java环境的人可能不熟悉,比如一些打字系统的一些特性。有些人认为,在你了解Scala之前,它还有很多东西要学,这是Scala语言的一个问题;我不同意。这些特征的存在是该语言的一个优势。功能越多越好。毕竟,你不必一次全部使用它们,就像你不必购买商店里出售的所有东西一样。

  • 可移植性:至少我希望是Linux和Windows。那手机呢,有人成功地让它在那里运行吗
对。Android上的Scala有相当大的发展。至于J2ME,我在这方面看到了一些东西,但并不多。源代码存储库中有一些与J2ME相关的代码。我不确定这是否可行,但在我看来,这方面的需求并不多

我还要提到,Scala Lang上有一个关于所需目标平台的池,J2ME就是其中之一,在图腾柱上非常低

    C++兼容性:我能将C++代码与斯卡拉混合吗?(JNI?)
<>你可以把C++和java混合在一起,不管它有什么价值。如果您没有这方面的经验,您可以阅读Java资源,因为其中的任何内容都可以在不做任何更改的情况下适用于Scala(Scala语法除外)

  • 编程范例:现在我对切换到FP感到不舒服。我可以先将OO和过程与一些FP一起使用,然后在学习时更改比例吗
当然,是的。Scala尽力确保您不需要使用函数式编程。这是斯卡拉从功能性的人的主要批评,事实上:有些人不认为语言的功能,除非它迫使程序员写I