自从Smalltalk开始以来,我已经成为一名Java程序员超过10年了.我认为下一个大型语言很可能是在无处不在的Java虚拟机上运行的.我想利用Scala(以及其他语言)中的一些特性 - case
类层次结构,闭包,类型推断的语句,因为它将允许我编写更简洁明了(我希望)的代码.更接近Smalltalk!
所有在Java中都是第二天的东西:
建筑用 ant
将应用程序/库部署到逻辑jar
s中
伟大的IDE工具支持
编写GUI(或通过某种远程处理方式将Swing GUI与它对话?)
第三方图书馆/框架
配置(属性XML
,Spring
等等)
DB驱动程序等
我担心玩一些宠物项目和实际上在工作场所愤怒地使用它之间的区别有点太多了.
有人做过这个飞跃吗?
它值得吗?
你学到了什么教训?
(显然人们正在使用 Scala - 但是有人建立实际的,因为想要一个更好的词,企业应用程序?)
我在现有的Java基础结构上使用Scala来查询和操作大型xml文档.不可能使用标准Java xml库或不那么容易.
我很想将它用于投资组合性能计算,但已经完成了Java版本.Scala版本更易于维护,因为将公式直接转换为代码更容易.
你可以潜入Scala的另一个领域是多线程.没有真正的经验,但在Scala中似乎更容易.
重点是,现在不要试图将其视为Java替代品,而是在可以利用现有Java代码旁边的强度的地方使用它.
我使用Intellij和Scala插件作为IDE,但它还没有.它可以与maven插件和控制台结合使用.
我也是Smalltalk程序员,喜欢在Scala中使用代码块.与Java相比,代码更少,但仍然不像Smalltalk代码那样可读.
顺便说一句,由于Seaside框架,smalltalk社区再次增长,所以你可能想要回归
我学到的东西或者更好地理解了:
使用构造函数
不可改变的概念
使用列表和递归
功能编程一般
所以,是的,我认为这是值得的.
JonasBonér:http://jonasboner.com/2009/01/30/slides-pragmatic-real-world-scala.html
在我们的上一个项目中,我基本上用Scala代码击中了所有人,因为我厌倦了调试由于缺乏对Hibernate + JBoss的理解而导致的相同问题.(真的很棒.编写原始系统的开发人员仍然在那里,但仍然迷失在Hibernate细节中.)
我们有什么 - >一个古怪的系统,主要由一堆无状态EJB bean连接在一起,一些hibernate代码与一些SQL一起抛出.(我们基本上是ASP.生产集群相当小 - >只有大约100台机器.)
我做了什么 - >组合各种基于REST的服务,我们重新定义了一些服务器之间的RPC.这使得所有内容都非常容易编码,并且在一个没有注意依赖关系的系统中实现公共API.
到目前为止,我们已经开始在JBoss实例中部署代码而没有真正的问题.第一次尝试object
在Java中使用Scala 时,你可能会皱起眉头.但除此之外,没有人真正注意到
到目前为止,我们真的开始已经有5个月了.我们已经做了几次重大修改,后来又落后了,但系统远比过去好得多.因此,虽然我们在实际学习系统的过程中遇到了一些不好的想法,但我们现在已经能够将它们全部删除,并且非常接近生产部署.总而言之,我会说典型的家伙需要2-3个月才能像Java程序员一样停止编码,并且对大多数标准库"熟悉".
编写JDBC代码而不是ORM系统基本上已经抛出了我们几乎所有的性能问题.速度实际上明显更好,但这主要是因为我能够用不太真实的应用程序代码完成我想要的一切.
我正在使用的工具:
Restlet:对这个框架非常满意.我们的restlet层是非常简单的代码.
JDBC - >注意:我们已经调整了wiki中的基本内容
XML(很快,JSON)
buildr,maven在几个我不想转换的项目上(加上Nexus和Hudson).我正在尝试使用sbt,这对于scala项目已经非常好了.
我们在重用任何旧的java库时都没有遇到任何问题,但我们确实倾向于将它们包装在scala-fied层中.主要是编写更少的代码.
而皮条客我的图书馆模式是目前最重要的是熟悉的."蛋糕"模式很好,但你必须控制实例化,这有时不太有用.我也在混合环境中使用Guice,也不是很难.但我发现混合代码没有我原先想象的那么有用,尽管这可能是因为我正在替换很多非常非常糟糕的Java代码.
我的编辑环境主要是OS X上的TextMate,但我们部署在Linux服务器上.
PS是的,我知道这是大约4个月大,但无论如何.它是相关的,特别是现在我们有一些经验.