关于来自Rubyist的Scala的问题

jin*_*inx 27 ruby scala scala-2.8

我最近一直在四处寻找在业余时间学习一门新语言,而Scala似乎非常有吸引力.

我有几个问题:

  1. 不知道Java在学习方面有什么挑战吗?以后这会是一个很大的劣势吗?(即人们多久依赖特定于Java的库?)

  2. 与Ruby相比有多大的不同?(除了静态类型)它是否引入了许多新术语,还是我熟悉大多数语言的机制?

  3. 你会推荐什么资源?我有我的眼睛Programming ScalaBeginning Scala书本

  4. 虽然主观,Scala有趣的程序吗?:P

谢谢

ret*_*nym 37

Ruby和Scala之间共享许多概念.自从我编写Ruby以来已经有一段时间了,所以这并不详尽.

Ruby <==> Scala(大约!)

  • Mixins <==>特征
  • 猴子修补<==> Pimp我的库(使用额外方法对包装器进行隐式转换)
  • Proc/Closure <==>功能/功能文字
  • 鸭子打字<==>结构类型
  • 最后一个参数作为Proc <==> Curried参数列表(参见Traversable#flatMap)
  • 可枚举<==>可遍历
  • 收集<==>地图
  • 注入<==> foldLeft/foldRight
  • Symbol.toProc <==>占位符语法糖: people.map(_.name)
  • 动态打字简洁<==>类型推断
  • Nil <==> null,尽管Option更可取.(不是 Nil,这是一个空列表!)
  • 一切都是表达式<==>同上
  • 符号/哈希作为参数<==>命名和默认参数
  • 单身人士<==> object Foo {}
  • Everthing是一个对象<==> Everthing是一种类型或一个对象(包括函数)
  • No Primitives <==>统一类型系统,Any是基元和对象的超类型.
  • 一切都是消息<==>操作符只是方法调用

您可能会错过Ruby的功能

  • method_missing的
  • define_method等

Scala您应该学习的功能

  • 模式匹配
  • 不可变类,特别是案例类
  • 隐式视图和隐式参数
  • 类型,类型和类型:泛型,方差,抽象类型成员
  • 对象和功能的统一,特殊含义applyupdate方法.

  • Scala 2.9将引入`scala.Dynamic`,类似于`method_missing`. (10认同)
  • 该死的Scala,你赢得了这个Rubyist的心!:)我看得越深,它看起来就越壮观. (3认同)

Dan*_*ral 19

这是我的看法:

  • 别介意不懂Java.

  • Scala很大程度上依赖于Java库.这根本不重要.你可能无法阅读一些例子,当然,但不足以成为障碍.只需很少的时间,您甚至不会注意到阅读Java API文档和Scala API文档之间的区别(除了最新scaladoc的完全不同的风格).

    但是,通常会假设您熟悉JVM环境.如果我可以在这里提出一个建议,那就是首先避免使用Maven,并使用SBT作为构建工具.这对于小型程序来说是不必要的,但它会使Java-lang世界中的许多问题变得更容易处理.只要您想要一个外部库,就可以了解SBT.有了它,您将不必处理任何XML:您在Scala中编写构建规则.

  • 您可能会发现很难获得类型概念和术语.Scala不仅是静态类型,而且还有非学术语言中最强大的类型系统之一.我打赌这将是你遇到的最困难的根源.其他概念有不同的术语,但你会很快与Ruby相提并论.

    但这并不是一个很大的障碍 - 如果你愿意,你可以克服它.主要的缺点是你可能会觉得你之后学到的任何其他静态类型的语言都是笨拙和有限的.

  • 你没有提到的编程斯卡拉你有你的眼睛上.有两个,加上一个Scala编程.后者是由语言创造者编写的,并且被广泛认为是一本优秀的书,但也许有点慢.其中一个编程Scala是由一个推特人 - 亚历克斯佩恩和前对象导师的Dean Wampler编写的.这也是一本非常好的书.开始Scala是由Lift的创建者David Pollack编写的,人们已经对它说了很多好话.事实上,我没有听到任何人抱怨任何Scala书籍.

    其中一本书肯定会有所帮助.此外,对Scala问题的Stack Overflow支持非常好 - 我尽力确保这一点!:-)有scala-users邮件列表,也可以得到答案(只要人们不是很忙),Freenode上有#scala IRC频道,你也会得到很好的支持.有时人们不在身边,但是,如果他们在,他们会帮助你.

    最后,还有博客.对初学者来说最好的可能就是Daily Scala.你可以找到很多很多其他的星球斯卡拉.其中,我自己的算法挑战,最近没有太多的爱,但我会回到它.:-)

  • Scala为我编程恢复了编程的乐趣.当然,我正在做Java,这是博客,imho.我花了这么多时间回答Stack Overflow问题的一个原因是,我喜欢为所提出的问题制定解决方案.


oxb*_*kes 8

我将介绍一下需要多少Java知识的注意事项,因为我不同意这根本不是问题.有一些关于Java的东西与scala直接相关,你应该理解.

  1. Java内存模型,哪些机制平台提供了并发性.我在谈论同步,线程等

  2. 原始类型(double,float等)和引用类型(即子类Object)之间的区别.Scala提供了一些很好的机制来隐藏开发人员,但是如果编写必须具有高效性的代码,知道这些工作原理是非常重要的.

这有两个方面:Java运行时提供的功能(我怀疑,虽然我可能错了)在Ruby中不可用,并且对您有很大的好处:

  • 管理扩展(MBean)
  • JConsole(用于运行时监视内存,CPU,调试并发问题)
  • JVisualVM(用于调试内存和性能问题的代码的运行时检测)

这些点#1和#2并非不可克服的障碍,我认为这里提到的其他相似之处对您有利.哦,Scala肯定很有趣!


Mal*_*lax 7

我没有Ruby背景但是,我可以帮助你.

  1. 我不知道Java不是一个缺点,但它可能会有所帮助.在我看来,Java库经常被使用,但即使是训练有素的Java编码器也不会全部知道它们,所以这里没有缺点.您将通过学习Scala来学习Java库的某些部分,因为即使Scala库也使用它们.

  2. -

  3. 我开始阅读Programming Scala并翻过来阅读Scala库的来源.后者帮助了解了很多语言.和往常一样:代码,代码,代码.没有编码的阅读不会让你到任何地方,但我相信你已经知道了.:-)另一个有用的资源是博客,请参阅/sf/ask/101150241/以获取好Scala博客的汇编.

  4. 它是!如你所说,这是非常主观的.但对我来说,来自Java背景,这很有趣.