首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该学习Scala吗?

我应该学习Scala吗?
EN

Stack Overflow用户
提问于 2009-07-10 10:34:10
回答 8查看 8.7K关注 0票数 31

我是一个经验丰富的C++程序员,拥有一般的Python技能。我首先研究Python的原因是:

  • 获得不同的编程视角(静态的和动态的,解释的和编译的,等等)
  • 为了增加我可以处理的项目的广度(Python允许我做web开发,为Symbian手机开发或者编写快速的系统管理脚本)
  • 来补充我的C++技能。

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

不过,我怀疑我能否将它用于中等到大型的项目。虽然动态输入是方便的,但它允许某种类型的bug,我觉得这是令人不安的。单元测试和链接可以缓解这个问题,但是静态类型完全消除了这个问题。

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

但是..。我也有一些疑问,我希望Stack溢出社区能在这里提供帮助:

  • 可移植性:至少我希望Linux和Windows。那移动电话呢,它有可能在那里运行吗?
  • C++兼容性:我可以将C++代码与Scala混合吗?(JNI?)
  • 编程范例:现在我不习惯于切换到函数式编程(FP)。首先,我可以用一些FP来使用面向对象和过程的方法,然后在我学习的过程中改变比例吗?
  • 工具链成熟度:您对IDE和调试器有什么经验?我现在正在使用Eclipse,这似乎还可以。
  • 学习速度:考虑到我的经验,你认为我能用Scala达到一个可行的水平有多快?
  • 部署:如何部署Scala程序?它是一个罐子,是一个可执行文件吗?

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-07-10 14:49:45

  • 可移植性:至少我希望Linux和Windows。那移动电话呢,有人成功地让它在那里运行吗?

是。Android上的Scala有相当大的变化。至于J2ME,我在这方面看到了一些东西,但并不多见。源代码存储库中有一些与J2ME相关的代码。我不知道这是否可行,但在我看来,这方面的需求不大。

我还将提到Scala上有一个关于所需目标平台的池,而J2ME是其中之一,在图腾极上非常低。

  • C++兼容性:我可以将C++代码与Scala混合吗?(JNI?)

此外,您还可以将C++与Java混合使用,无论这有什么价值。如果您没有这方面的经验,您只需阅读Java资源,因为Java资源中的任何内容都适用于Scala,没有任何更改(除了Scala语法)。

  • 编程范例:我对此时切换到FP感到不舒服。首先,我可以在一些FP中使用OO和过程性,然后在我学到的时候改变比例吗?

当然是的。Scala用它来确保您不需要使用函数样式进行编程。事实上,这是函数派对Scala的主要批评:有些人不考虑语言函数式,除非它迫使程序员用函数式写作。

不管怎样,你可以按你自己的方式做事。不过,我敢打赌,你会养成功能性的习惯,而不会意识到它们是功能性的。

也许您可以在我自己的博客中查看有关编写矩阵类的矩阵系列。尽管它看起来像标准的OO代码,但实际上它非常实用。

  • 工具链成熟度:您对IDE和调试器有什么经验?我现在正在使用Eclipse,这似乎还可以。

IDEA (IntelliJ)、NetBeans和Eclipse都对Scala有很好的支持。看起来IDEA是最好的,NetBeans /Eclipse尽管NetBeans肯定比最近的Eclipse更稳定,但它们之间还是相互跳跳。另一方面,Eclipse上的支持正在采取一条非常有希望的路线,在未来6个月左右会产生结果--只是这是一条颠簸的路线。:-)

对于这些环境,Scala工具的一些有趣的迹象是,开发中的Eclipse使用AOP来与整个IDE更加无缝地合并,NetBeans插件正在用Scala完全重写,还有一个Scala支持将Java代码转换为Scala代码。

EMACS人员也为Scala提供了广泛的工具,许多较小的编辑器也对它提供了支持。例如,我对jEdit对小型程序和脚本的支持非常满意。

也有很好的Maven支持--事实上,安装电梯的标准方法是安装maven,然后构建一个Lift原型。这将引入一个适当的Scala版本。还有一个scala:cc目标也会触发重新编译。

说到重新编译,无论是Maven,特别是Ant,都不能很好地识别需要重新编译的内容。这个问题产生了用Scala编写的SBT (简单构建工具),它通过使用Scala编译器插件解决了这个问题。SBT使用与Maven以及Maven/Ivy存储库相同的项目布局,但是项目配置是在Scala代码中完成的,而不是XML --同时也支持Maven/Ivy配置文件。

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

非常快。作为一种纯粹的面向对象语言,Scala已经引入了一些不错的特性,这些特性可以与C++中的一些东西相媲美,尽管它们以不同的方式工作。在这方面,一旦您认识到这些特性的用途并将它们与C++相关,您将远远领先于Java程序员,因为您已经知道如何处理它们了。

  • 部署:如何部署Scala程序?它是一个罐子,是一个可执行文件吗?

和Java是一样的。您可以部署JAR、WAR或任何其他Java目标,因为scala编译器生成类文件。实际上,您可以使用Java的jar从类文件生成Scala的JAR文件,并使用Maven目标来构建WAR文件。

不过,还有一种替代脚本文件的方法。您可以调用" Scala“直接运行Scala源代码,类似于Shell脚本的Perl。它也可以在Windows上完成。但是,即使使用编译守护进程来加快执行速度,启动时间也很慢,以致于在繁重的脚本环境中有效地使用Scala需要一些类似钉枪的东西。

至于Scala的缺点,看看我在堆栈溢出问题中的答案(和其他的)。

票数 28
EN

Stack Overflow用户

发布于 2009-07-10 10:43:00

Scala是一种非常值得投资的不断发展的语言,特别是如果您来自Java世界。Scala在阿蒂玛中得到了广泛的介绍。请参阅比尔·文纳斯的这篇文章,并阅读关于Twitter和Scala的文章。

关于你的问题:

  • Java可以在有JVM的地方运行。不过,手机没什么进展。您需要一个完整的JRE,而不是可用的子集。
  • 这和JNI是有可能的。如果Java有可能,那么Scala也是可能的。Scala可以调用Java类。
  • 函数式编程是Scala的一个优点--你确实需要学习它。然而,您也可以开始使用它,而不充分利用它,并使用您的方式。
  • 有一个Eclipse插件。这不是最好的,但它会做好这项工作的。更多细节这里
  • 如果你有经验的话,我会说非常快。我建议你先找一本书。
  • 有关部署,请参见此常见问题条目。
票数 16
EN

Stack Overflow用户

发布于 2009-07-10 13:43:23

编程范例:我对此时切换到FP感到不舒服。首先,我可以在一些FP中使用OO和过程性,然后在我学到的时候改变比例吗?

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

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

快点。Scala中有许多有趣的特性,对于来自C++环境的人来说可能并不熟悉,例如,类型化系统的一些特性。有些人认为,在您了解Scala之前,有很多东西需要学习,这是语言的一个问题;我不这么认为。这些特征的存在是语言的一个优势。特征越多越好。毕竟,你不必一次就把它们全部使用,就像你不必购买商店里出售的所有东西一样。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1108833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档