你能否为Scala哲学和程序设计提出任何好的介绍?

时间:2010-08-31 23:05:45

标签: scala

在Java和C ++中,设计程序的对象层次结构非常明显。但是从Scala开始,我发现自己很难确定要定义哪些类来更好地使用Scala的语法糖设施(甚至理想我应该如何设计以获得更好的性能)。关于这个问题有什么好的读数吗?

4 个答案:

答案 0 :(得分:7)

我已经阅读了4本关于Scala的书,但我还没有找到你要求的东西。我猜你已经读过Odersky(Artima)的“Scala编程”。如果没有,这是一个指向在线版本的链接:

http://www.docstoc.com/docs/8692868/Programming-In-Scala

本书提供了许多如何在Scala中构建面向对象模型的示例,但所有示例的类数量都非常少。我不知道有任何书会教你如何使用Scala构建大规模系统。

  • 势在必行的面向对象有 自Smalltalk以来一直存在,所以我们 了解这个范例很多。
  • 功能性面向对象 另一方面,这是一个相当新的概念, 所以几年后我会期待书籍 描述大规模FOO系统 出现。无论如何,我认为是PiS 书给你一个很好的图片 你怎么能把基本的拼凑起来 系统的构建块,如 工厂模式,如何更换 战略模式与功能 文字等等。

Viktor Klang曾告诉我的一件事(以及我真正同意的事情)是C ++ / Java和Scala OO之间的一个区别是你在使用Scala时定义了更多(更小)的类。为什么?因为你能! case class的语法糖在定义类时会产生非常小的代价,无论是在键入还是在代码的可读性方面。如你所知,许多小班通常意味着更好的OO(更少的错误)但性能更差。

我注意到的另一件事是,在处理不可变对象时,我更多地使用工厂模式,因为实例的所有“更改”都会导致创建新实例。感谢上帝对copy()的{​​{1}}方法。这种方法使工厂方法缩短了很多。

我不知道这对你是否有帮助,但我认为这个主题非常有趣,而且我也在等待更多关于这个主题的文献。 干杯!

答案 1 :(得分:4)

这仍然是一个不断发展的问题。例如,刚发布的Scala 2.8.0支持类型构造函数推理,它在Scala中启用了类型类的模式。 Scala库本身刚刚开始使用这种模式。就在昨天,我听说了一个新的Lift模块,他们将尝试避免继承而支持类型类。

Scala 2.8.0还引入了较低优先级的隐含,加上默认和命名参数,这两个参数可以单独使用,也可以一起使用,以产生与以前不同的设计。

如果我们去back in time,我们会注意到其他重要功能也不是那么久:

    案例类的
  • Extractor 方法引用了2008年2月引用的对象(在此之前,对案例类进行提取的唯一方法是通过模式匹配)。
  • 懒惰值结构类型于2007年7月推出。
  • 2007年5月推出了对类型构造函数的抽象类型支持。
  • 非案例类的提取器于2007年1月推出。
  • 似乎隐含参数仅在2006年3月推出,当时他们取代 views 的实施方式。

这意味着我们都在学习如何设计Scala软件。确保依赖于功能和面向对象范例的经过测试的设计,以了解Scala中的新功能如何在其他语言中使用,如Haskell和类型类或Python和默认(可选)和命名参数。

有些人不喜欢Scala的这个方面,有些人喜欢它。但其他语言共享它。 C#正在添加与Scala一样快的功能。 Java速度较慢,但​​也经历了变化。它在2004年添加了泛型,下一个版本应该带来一些更改,以更好地支持并发和并行编程。

答案 2 :(得分:1)

我认为没有太多的教程。我建议你现在继续这样做,但是要查看“惯用的”Scala代码,并在以下情况下特别注意:

  • 用例类或案例对象而不是枚举或“值对象”
  • 将对象用于单身人士
  • 如果您需要“取决于上下文”或依赖注入式功能的行为,请使用implicits
  • 在设计类型层次结构时,或者如果您可以将某些事物从具体类中分解出来,请尽可能使用特征
  • 细粒度的继承层次结构是可以的。请记住,您有模式匹配
  • 了解“pimp my library”模式

并提出尽可能多的问题,因为您认为需要了解某一点。 Scala社区非常友好和乐于助人。我建议使用Scala邮件列表,Scala IRC或scala-forum.org

答案 3 :(得分:0)

我不小心用Google搜索了a file called "ScalaStyleGuide.pdf"。去读......