在Java和C ++中,设计程序的对象层次结构非常明显。但是从Scala开始,我发现自己很难确定要定义哪些类来更好地使用Scala的语法糖设施(甚至理想我应该如何设计以获得更好的性能)。关于这个问题有什么好的读数吗?
答案 0 :(得分:7)
我已经阅读了4本关于Scala的书,但我还没有找到你要求的东西。我猜你已经读过Odersky(Artima)的“Scala编程”。如果没有,这是一个指向在线版本的链接:
http://www.docstoc.com/docs/8692868/Programming-In-Scala
本书提供了许多如何在Scala中构建面向对象模型的示例,但所有示例的类数量都非常少。我不知道有任何书会教你如何使用Scala构建大规模系统。
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,我们会注意到其他重要功能也不是那么久:
这意味着我们都在学习如何设计Scala软件。确保依赖于功能和面向对象范例的经过测试的设计,以了解Scala中的新功能如何在其他语言中使用,如Haskell和类型类或Python和默认(可选)和命名参数。
有些人不喜欢Scala的这个方面,有些人喜欢它。但其他语言共享它。 C#正在添加与Scala一样快的功能。 Java速度较慢,但也经历了变化。它在2004年添加了泛型,下一个版本应该带来一些更改,以更好地支持并发和并行编程。
答案 2 :(得分:1)
我认为没有太多的教程。我建议你现在继续这样做,但是要查看“惯用的”Scala代码,并在以下情况下特别注意:
并提出尽可能多的问题,因为您认为需要了解某一点。 Scala社区非常友好和乐于助人。我建议使用Scala邮件列表,Scala IRC或scala-forum.org
答案 3 :(得分:0)
我不小心用Google搜索了a file called "ScalaStyleGuide.pdf"。去读......