七周七语言 – Scala

1月19日,在Autodesk办公室,举办了七周七语言Scala的学习和CodeJam活动, 由Autodesk的两位Scala高手化了一上午系统讲授了Scala语言,并带着大家下午一起做练习,掌握了函数式编程的特性。
 
 
上午为基础课程,讲师教授,学习语言基础知识  

张   赟: 微博: bbsmrdj

何晓乾: 微博: 何晓乾

 

下午为Coding Dojo,实践学到的语言知识

 

布置习题,大家很专心地领会。

做到下午4点半,找了一个同学来演示他的作业

又来了一个同学,一起现场写代码

最后,老师再做些总结和指点。

在布置了家庭作业后,留到最后的一起合影。

 

七周七语言-Scala课堂作业文件:”patmat.zip”,huffman算法 http://t.cn/zjFwR98

建议大家都去这个网站学习和看视频:http://t.cn/zjFwR9Q 

分组练习,每组合作完成一个小项目。

完成后,每组演示代码,并由讲师点评。

 
本次活动除了讲师和组织者,一共有21人参加,其中11人坚持到下午CodeJam结束,有9人缴纳了50元押金以督促自己学习完成作业。

 

 

 

课后作业

讲师分派的一个课后作业,每个人必须在一周内独立完成。并发布在指定的网站be001.com 上,由讲师进行评估。

课后作业文件包:”forcomp.zip”,http://t.cn/zjFUMan

评估合格,可以返还50元押金。

 

参加者必须自带笔记本电脑。

 

预习资料

简介

Scala编程语言近来抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。

Christopher Diggins认为: 

不太久之前编程语言还可以毫无疑义地归类成“命令式”或者“函数式”。Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。 

根据David Rupp在博客中的说法,Scala可能是下下一代Java。这么高的评价让人不禁想看看它到底是什么东西。  

Scala可以与Java互操作。它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码)。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。用David Rupp的话来说, 它也可以访问现存的数之不尽的Java类库,这让(潜在地)迁移到Scala更加容易。 

这让Scala得以使用为Java1.4、5.0或者6.0编写的巨量的Java类库和框架,Scala会经常性地针对这几个版本的Java进行测试。Scala以BSD许可发布,并且数年前就已经被认为相当稳定了。

历史

洛桑联邦理工学院的Martin Odersky于2001年基于Funnel的工作开始设计Scala。Funnel是把函数式编程思想和Petri网相结合的一种编程语言。 Odersky先前的工作是Generic Java和javac(Sun Java编译器)。Scala于2003年底/2004年初发布。该语言第二个版本,v2.0,发布于2006年3月。

Scala 2.8的特性包括重写的Scala容器库(Scala collections library)、调用方法的命名参数和默认参数、包对象(package object),以及Continuation.

2012年1月,发布版本 2.9.1。

2012年4月,发布版本 2.9.2。

使用Scala的公司/软件

2009年4月,Twitter宣布他们已经把大部分后端程序从Ruby迁移到Scala,其余部分也打算要迁移。

 

特性

支持的编程范式

面向对象特性

Scala是一种纯面向对象的语言,每一个值都是对象。对象的数据类型以及行为由类和特征(Trait)描述。类抽象机制的扩展有两种途径。一种途径是子类继承,另一种途径是灵活的混入(Mixin)机制。这两种途径能避免多重继承的种种问题。

函数式编程

Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型(Algebraic type)。

更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。在这些情形中,列表推导式(List comprehension)功能对编写公式化查询非常有用。

由于JVM不支持尾调用,Scala也不能完全支持尾调用优化。不过,Scala编译器可以把某些简单的尾递归优化成循环。

以下代码以函数式风格实现了快速排序算法,可以与Erlang快速排序的例子做个比较:

def qsort(list: List[Int]): List[Int] = {

  case Nil => Nil

  case pivot :: tail =>

    val (smaller, rest) = tail.partition(_ < pivot)

    qsort(smaller) ::: pivot :: qsort(rest)

}

静态类型

Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:

· 泛型类型,

· 型变注释(Variance Annotation),

· 类型继承结构的上限和下限,

· 把类别和抽象类型作为对象成员,

· 复合类型,

· 引用自己时显式指定类型,

· 视图,

· 多态方法。

扩展性

Scala的设计承认一个事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:

· 任何方法可用作前缀或后缀操作符,

· 可以根据预期类型自动构造闭包。

联合使用以上两个特性,使你可以定义新的语句而无须扩展语法也无须使用宏之类的元编程特性。

安装

· https://class.coursera.org/progfun-2012-001/wiki/view?page=ToolsSetup 

测试

以下是测试Scala代码的一些方式:

· ScalaTest

· ScalaCheck类似于Haskell的QuickCheck的一个库

· specs,一个用于Scala的行为驱动的开发工具库

· JUnit

内置的Scala库SUnit已经不赞成使用,已在2.8.0版中移除。

在线视频课程

· https://class.coursera.org/progfun-2012-001/lecture/index 

官方网站

· http://www.scala-lang.org/

帮助文档

· http://www.scala-lang.org/api/current/index.html

图书

· Programming in Scala – (ISBN 978-0-9815316-0-1) A comprehensive step-by-step guide by Martin Odersky, Lex Spoon, and Bill Venners.

· Beginning Scala – (ISBN 978-1-4302-1989-7) A down–to–earth approach to teaching Scala by David Pollak.

· Programming Scala – (ISBN 978-1-934356-31-9) Creating highly scalable, highly concurrent applications on the Java platform by Venkat Subramaniam.

· Programming Scala ( ebook)

链接

· Scala website

· Scala Wiki

· Literate Programs – Scala

· The Scala Search Engine

· Lift Web Framework

· Podcast Interview with Martin Odersky on Scala

· Scala Presentation From The Googleplex (video) – given by Martin Odersky, creator of the language; accompanying slides from the talk

· Scalaz

· Scala community blogs

· Lift Slides from Pollak’s lift video, contains a presentation of Scala

· Scala articles directory

· Scala 学习笔记

· 斯卡拉鱼 (ScalaFish)

· Scala中文

 

 

首次七周七语言-Golang 35人参加,21人交押金,13人完成

第二次七周七语言-Python 65人参加,38人交押金,24人完成

第三次七周七语言-R 50人参加,16人交押金,11人完成

第四次七周七语言-Ruby 28人参加,16人交押金,7人完成

第五次七周七语言-node.js 40人参加,11人交押金,8人完成

 

 

七周七语言 QQ群:62498052

Posted in 故事.