有人愤怒地使用Scala吗(对Java程序员有什么建议)?

有人愤怒地使用Scala吗(对Java程序员有什么建议)?,java,scala,jvm-languages,Java,Scala,Jvm Languages,自从开始使用Smalltalk以来,我已经做了十多年的Java程序员。我的观点是,下一个大的语言可能是在无处不在的Java虚拟机上运行的语言。我想利用Scala(在其他语言中)的一些特性-case语句用于类层次结构、闭包和类型推断,因为它将允许我编写更简洁、更清晰(我希望)的代码。有点接近Smalltalk Java的第二天性是: 使用ant的建筑 将应用程序/库部署到逻辑jars 强大的IDE工具支持 编写GUI(或者让Swing GUI通过某种远程处理与之对话?) 第三方库/框架 配置(属

自从开始使用Smalltalk以来,我已经做了十多年的Java程序员。我的观点是,下一个大的语言可能是在无处不在的Java虚拟机上运行的语言。我想利用Scala(在其他语言中)的一些特性-
case
语句用于类层次结构、闭包和类型推断,因为它将允许我编写更简洁、更清晰(我希望)的代码。有点接近Smalltalk

Java的第二天性是:

  • 使用
    ant的建筑
  • 将应用程序/库部署到逻辑
    jar
    s
  • 强大的IDE工具支持
  • 编写GUI(或者让Swing GUI通过某种远程处理与之对话?)
  • 第三方库/框架
  • 配置(属性、
    XML
    Spring
    等)
  • 数据库驱动程序等
我担心,在工作场所玩弄一些宠物项目和在愤怒中使用它们之间的区别有点太大了

  • 有人做到了这一点吗
  • 值得吗
  • 你从中学到了什么
    (很明显,人们在使用Scala,但是有没有人在用Scala(和Clojure)构建实际的“企业”应用程序呢?

    是的,人们在用Scala(和Clojure)构建实际的“企业”应用程序。就这么做吧


    当然,人们也在使用Smalltalk,所以如果你喜欢Smalltalk,为什么不使用它呢?

    我已经将clojure添加到任务科学运行中心使用的软件基础设施中。现在它是用来进行交互式调试的;以特别的方式运行REPL、加载一些类和执行方法

    编辑:好的,所以“加载一些类并执行方法”是模糊的。例如,我们可以加载crud类,然后执行方法将一种航天器时间转换为另一种航天器时间

    user=> (import '(gov.nasa.kepler.hibernate.dr LogCrud)) user=> (def crud (new LogCrud)) #'user/crud user=> (def shortCadences (.longCadenceToShortCadence crud 0 2500)) user=> (prn shortCadences) #> 用户=>(导入(gov.nasa.kepler.hibernate.dr LogCrud)) 用户=>(def crud(新日志crud)) #'用户/积垢 用户=>(def shortCadences(.LongCadenceToSortCadence积垢0 2500)) 用户=>(prn快捷键) #>
    可以调用其他方法将此时间转换为其他类型的时间格式,这些格式可能对调试有用。我们可以制作命令行工具来封装所有这些功能,但没有必要这样做,因为clojure提供了所有功能。

    Jonas Bonér就是其中之一:

    我在现有Java基础设施上使用Scala来查询和操作大型xml文档。使用标准Java xml库是不可能的,或者没有那么容易

    我很想用它来计算投资组合的性能,但已经完成了Java版本。Scala版本更容易维护,因为它更容易将公式直接转换为代码

    您可以潜入Scala的另一个领域是多线程。没有这方面的实际经验,但在Scala中似乎更容易

    关键是,现在不要试图将其视为Java的替代品,而是在可以利用现有Java代码的地方使用它

    我使用Intellij和Scala插件作为IDE,但现在还没有。它可以与maven插件和控制台结合使用

    我也是一名Smalltalk程序员,喜欢在Scala中使用代码块。与Java相比,代码更少,但可读性仍然不如Smalltalk代码

    顺便说一句,由于Seaside框架,smalltalk社区正在再次增长,因此您可能希望返回

    我学到的或更好地理解的东西:

    • 构造函数的使用
    • 不变的概念
    • 使用列表和递归
    • 一般的函数式编程

    因此,是的,我认为这是值得的。

    另请参见:

    在上一个项目中,我基本上用Scala代码打击了所有人,因为我厌倦了调试由于对Hibernate+JBoss缺乏了解而导致的相同问题。(这真是太神奇了。编写原始系统的开发人员仍然在那里,仍然沉浸在Hibernate的细节中。)

    我们所拥有的->一个古怪的系统,主要由一堆无状态EJB bean组成,这些bean与一些hibernate代码和一些SQL结合在一起。(基本上,我们是ASP。生产集群相当小->只有大约100台机器。)

    我所做的->将各种基于REST的服务组合在一起,我们在其中重新定义了一些服务器之间的RPC。这使得一切都很容易编码,另外,在一个没有关注依赖关系的系统中实现一个公共API

    到目前为止,我们已经开始在JBoss实例内外部署代码,没有任何实际问题。第一次尝试在Java中使用Scala
    对象时,您可能会皱起鼻子。但除此之外,没有人真正注意到

    到目前为止,我们真正开始工作已经5个月了。我们已经做了几次重大的修改,后来都落后了,但是系统的测试要比过去好得多。所以,虽然我们在真正学习系统时,有一些坏主意潜入其中,但我们现在能够将它们全部删除,并且非常接近生产部署。总而言之,我想说一个典型的家伙需要2-3个月才能停止像Java程序员那样编码,并“熟悉”大多数标准库

    编写JDBC代码而不是ORM系统基本上解决了几乎所有的性能问题。速度实际上已经大大提高了,但这主要是因为我能够用更少的实际应用程序代码完成我想要的一切

    我正在使用的工具:

  • :非常满意这个框架。我们的restlet层是极其平凡的代码
  • ->注意:我们已经调整了wiki中的基本内容
  • XML(很快就会变成JSON)
  • 别伊