Scala中文教程和手册

banq 13-11-22
              

Twiiter的中文版Scala教程:Scala 课堂

Scala课堂是Twitter启动的一系列讲座,用来帮助有经验的工程师成为高效的Scala 程序员。Scala是一种相对较新的语言,但借鉴了许多熟悉的概念。因此,课程中的讲座假设听众知道这些概念,并展示了如何在Scala中使用它们。我们发现这是一个让新工程师能够快速上手的有效方法。网站里的是伴随这些讲座的书面材料,这些文字材料本身也是很有用的。

方法
我们认为最有意义的教学方式是,不要把Scala看做是改进的Java,而是把它作为一门新的语言。所以这里不会介绍Java的使用经验,而将聚焦在解释器和“对象-函数式”的风格,以及我们的编程风格。特别强调了可维护性,清晰的表达,和利用类型系统的优势。

大部分课程除了Scala的交互命令行之外不需要其他软件。我们鼓励读者按顺序学习,并且不仅限于此。让这些课程作为您探索Scala的起点吧!

课程
基础
值,函数,类,方法,继承,try-catch-finally。面向表达式编程
基础知识(续)
样本类,对象,包,应用,更新,函数即对象(统一访问原则),模式匹配。
集合
列表,映射,功能组合(map, foreach, filter, zip, folds)
模式匹配与函数组合
更多函数!偏函数,更多模式匹配
类型和多态基础
基本类型和类型多态性,类型推断,变性,边界,量化
高级类型
高级类型,视界,更高级多态性类型,递归类型,结构类型
简单构建工具
关于SBT——标准的Scala构建工具
更多的集合
Scala Collections库指南
使用specs测试
Scala 并发编程
Runnable, Callable, 线程, Futures
Java + Scala
Java跨平台交互:在Java中使用Scala
Finagle介绍
Finagle原语:Future, Service, Filter, Builder
Searchbird
利用Finagle构建一个分布式搜索引擎

              

banq
2013-11-22 11:58

这篇教程没有对Scala中经常使用的=>进行一个专门交代,这也是我开始研究Scala的迷惑之处。
其实=>这体现了函数编程的主要风格。

在这篇Scala课堂中找到第一涉及=>是匿名函数:
scala> (x: Int) => x + 1

起初我以为(x: Int) => x + 1 类似int x = x+1这个算式。其实不然,
(x: Int) => x + 1
表示一个函数。如果把函数看成一个黑盒,那么黑盒有输入和输出,=>左边是输入参数,=>右边是输出,
当然黑盒和输出混合在一起。

教程中第二个出现=>是如下:
{ i: Int =>
println("hello world")
i * 2
}

那么=>有没有官方名称,文档好像没有给出,这是属于整个函数编程的大范畴。

有人解释=>为lambda的操作符,有人解释这是逻辑用语"意味"或“暗示”的意思。

比如A与B进行逻辑相与意味着C
∀A. ∀B. ∀C. ((A∧B)→C)→A→B→C
何三个命题(A,B,C),那么A和B结合(逻辑与)暗示c蕴涵A蕴含B意味着C
有些晕:http://blog.tmorris.net/posts/proving-the-existence-of-curry/

关心的人挺多:http://www.artima.com/forums/flat.jsp?forum=282&thread=239168&start=0&msRange=100

讨论中有些人读“发射火箭”rocket意思,而逻辑上"implies意味/暗示"从中文也无法理解。

再看:
if i < 0 => i - 1

=>左边是一个判断,如果i<0,那么返回i-1。

=>的 右边可以认为代表细节,代表函数体,代表ReturnValue is “右边”.

如果熟悉javascript,比如定义一个函数:
function abc(p1,p2){...}

还有一种方式:
var abc =(p1,p2){...}

(p1,p2){..}写法就类似这里函数写法,中间加了=>,变成(p1,p2)=>{..},就不需要{}两对大括号,都代表同一个意思。

以上是我个人理解。

总之,这个Twitter推出的Scala教程好像应该是参考手册更合适,不是严格意义教程,无法帮助初学者带入Scala世界。推荐中文PPT:http://www.slideshare.net/tonydeng/scala-6511473

[该贴被banq于2013-11-26 17:20修改过]

banq
2013-12-02 19:00

我整理了一份Scala函数编程入门,搞定map和flatmap是关键,接下来的java8也会碰到:
http://www.jdon.com/idea/scala/functional-programming.html