我最近有空就开始探索Scala。
不得不说,到目前为止我对它印象非常好。Scala建立在JVM之上,可以无缝地与现有的Java代码集成,并且拥有许多Java所没有的特性。
除了学习一门新语言,转换到Scala还有什么缺点吗?
我最近有空就开始探索Scala。
不得不说,到目前为止我对它印象非常好。Scala建立在JVM之上,可以无缝地与现有的Java代码集成,并且拥有许多Java所没有的特性。
除了学习一门新语言,转换到Scala还有什么缺点吗?
嗯,不足之处在于你需要准备好Scala可能有些粗糙:
作为一种语言,你还必须承担Scala可能消失的风险。
话虽如此,我认为你不会后悔选择Scala!总体而言,我的经验是积极的;IDE可用,你会习惯于理解加密的编译器错误,并且当你的Scala代码库很小时,向后兼容性的问题并不是一个主要麻烦。
值得去尝试使用Scala的原因包括:Option
、集合的单子功能、闭包、actors模型、提取器、协变类型等。这是一门令人惊叹的语言。
从不同角度解决问题对个人也非常有益处,而以上构造可以实现和鼓励这种方法。
最后,由于以上所有原因,Scala的第三方支持初露端倪。但需要注意的是,JetBrains公司一直支持Scala,他们通过销售IntelliJ IDEA IDE获得收益,并不断改进其支持。这意味着对第三方支持有需求,支持必将增加。
我指出了书籍情况。一年前市场上没有Scala的书籍。现在市场上有两三本Scala入门书籍,到年底应该会有同样数量的书籍,还有一本关于基于Scala的非常重要的Web框架Lift的书籍。
我打赌我们不久将会看到一本关于ESME的书籍,以及关于Scala和并发性的书籍。出版市场显然已经达到了临界点。一旦发生这种情况,企业也将跟随。
去年,我解除了J2EE的束缚,想尝试些新的东西。在企业中使用Java 12年,为世界上一些最大的公司构建了非常庞大的系统。
我以前尝试过Ruby on Rails。构建了一些示例应用程序后,我不喜欢它的感觉,或者说不喜欢需要编写大量单元测试来覆盖通常由编译器完成的任务。
Groovy on Grails是我的下一个选择。我必须说我很喜欢它,但它也存在与ROR相同的动态类型问题。别误解我,我并不是贬低Grails,因为它是一个很好的框架,我仍然会使用它。在我看来,每个框架都有其适用场景。
然后我尝试了Scala,并基于Scala和Spring MVC构建了一个混合应用程序。起初,使用Scala很困难,但随着你投入更多时间,它会变得更容易和高效。我已经到了一个转折点,现在想要在Lift中投资时间。
《Programming in Scala》和David Pollak的《Beginning Scala》书籍结合起来学习语言是不错的,后者比较实用。
Scala仍然很年轻,还有很长的路要走。但我认为它有着光明的未来,我看到已经出现了势头。最近,Groovy语言的创建者之一在博客中说,如果当时Scala存在的话,他就不会费心设计Groovy。
我认为,在更好地集成/包装Java API方面进行更多的工作将使Scala获得需要赢得更多追随者的推动力。基本的集成已经存在,但我认为还可以进一步改进。是的,IDE支持是存在的,但目前还比较基础。Intellij的强大重构支持还不存在,我非常怀念那个功能。编译器+ IDE支持以及其他插件的混合使用还不够成熟。有时,由于Scala与Goggle应用引擎的JDO增强的原因,我会遇到非常奇怪的内部编译器错误。然而,这些都是可以轻松修复的小问题。早期采用新技术和语言总是伴随着一些痛苦。但是这种痛苦可能会在未来带来巨大的乐趣。
如果我比较Scala与早期Java的能力,那么它遥遥领先。当我从C++转向Java时,JVM在可扩展性方面还没有准备好。在各种操作系统上,以前曾经出现过很多奇怪的崩溃和JVM core dump。但是现在Java已经解决了所有这些问题,JVM非常稳定。Scala运行在JVM上,因此它在本地平台集成方面拥有巨大的优势。它站在巨人的肩膀上!
经过多年的构建和支持企业应用程序,我认为编译器可以捕捉大部分非功能性错误,甚至在构建单元测试之前就可以检查这些错误的语言最好。我喜欢类型检查与函数式编程的结合所带来的强大能力。我喜欢我正在做的面向对象++。
我认为开发社区将决定Scala是否是未来。现在采用Scala的缺点是,如果它没有走向成功并且没有得到广泛的适应,那么维护Scala代码库将非常困难,因为Scala开发者非常少。然而,我看着Java从鼹鼠工程推向企业,取代C++,它完全是由开发社区推动的。对于Scala来说,时间会证明一切,但目前我支持Scala。
除了学习一门新语言之外,转换到Scala有什么劣势吗?
思考,思考,再思考...... 没有,没有任何劣势 :-)
我认为没有任何缺点。实际上,学习新的编程语言对于扩展你的编程知识非常有帮助。你可能会从Scala中获得一些东西,例如通用类、变异注释、上限和下限类型边界、内部类和抽象类型作为对象成员、复合类型、显式类型自引用、视图和多态方法。
implicit adapter2matrix(a:Adapter):Matrix = a.innerMatrix
添加到范围中,Scala会自动将对INeedJavaMatrix(AdaptorClass)
的调用转换为INeedJavaMatrix(adapter2matrix(AdaptorClass))
。详情请参考http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-6。 - Elazar Leibovich我所说的两个,其实是四个最大的缺点:
许多在专业社区中担任开发人员的人没有接受过培训,并且不愿意学习如何使用函数编程语言,甚至不愿尝试,因此无法理解为什么这是更好的方法。这意味着除非企业层面强制规定,否则您将始终在推广方面处于劣势。
关系型数据库集成仍然有些不稳定。虽然有很多解决方案,但没有一个真正突出的标准。但对我来说,这可能是一个优势而不是一个缺点。 JPA2很乱,引发的问题比解决的问题还要多。Hibernate标准查询也不是很好。
IDE支持仍然滞后,但主要是在调试方面。代码检查做得相当不错(至少在IntelliJ中)。
再也不想写Java代码了!一旦被迫返回Java笨拙的语法,你可能会想砸墙或打东西。
这里的答案有些过时,大约是在2022年左右,所以我想提供一些更新。我一直在一家科技公司工作,该公司开始使用Scala的时间与最初提出这个问题的时间差不多。最近,我在博客中谈到了在尝试教Java开发人员如何处理用习惯性Scala编写的代码库时学到的经验教训,所以这个话题现在对我来说非常重要。