Scala编程(第3版) - (EPUB全文下载)
文件大小:0.55 mb。
文件格式:epub 格式。
书籍内容:
Scala编程(第3版)
第1章 一门可伸缩的语言
第2章 Scala入门
第3章 Scala入门(续)
第4章 类和对象
第5章 基础类型和操作
第6章 函数式对象
第7章 内建的控制结构
第8章 函数和闭包
第9章 控制抽象
第10章 组合和继承
第11章 Scala的继承关系
第12章 特质
第13章 包和引入
第14章 断言和测试
第15章 样例类和模式匹配
第16章 使用列表
第17章 使用其他集合类
第18章 可变对象
第19章 类型参数化
第20章 抽象成员
第21章 隐式转换和隐式参数
第22章 实现列表
第23章 重访for表达式
第24章 深入集合类
第25章 Scala集合架构
第26章 提取器
第27章 注解
第28章 使用XML
第29章 用对象实现模块化编程
第30章 对象相等性
第31章 结合Scala和Java
第32章 Future和并发编程
第33章 组合子解析
第34章 GUI编程
第35章 SCells试算表
附录A Unix和Windows环境的Scala脚本
术语表
关于作者
开始阅读
书名页
版权页
正文
第1章 一门可伸缩的语言
Scala这个名字来源于“scalable language”,即“可伸缩的语言”。之所以这样命名,是因为它的设计目标随着用户的需求一起成长。Scala可被广泛应用于各种编程任务,从编写小型的脚本到构建巨型系统,它都能胜任。[1]
Scala很容易上手。它运行在标准的Java平台上,可以与所有Java类库无缝协作。它很适合编写将Java组件组装在一起的脚本。不过用Scala编写可复用组件,并使用这些组件构建大型系统和框架时,更能体现出它的威力。
从技术上讲,Scala是一门综合了面向对象和函数式编程概念的静态类型的编程语言。从很多不同的角度看Scala,我们都能发现面向对象和函数式编程两种风格的融合,这一点可能比其他任何广泛使用的编程语言都更为突出。在可伸缩性方面,这两种编程风格的互补性非常强。Scala的函数式编程概念让它很容易从简单的组件快速构建出有趣的应用。而它的面向对象编程概念又让它能够轻松地构造出更大的系统,并不断地适配新的要求。通过这两种编程风格的结合,Scala让我们能够表达出各种新式的编程模式和组件抽象。同时,我们的编程风格也变得清晰和简练。正因为它超强的可塑性,用Scala编程会非常有趣。
作为全书的第1章,本章将回答这个问题:“为什么要使用Scala?”我们将概括性地介绍Scala的设计和背后的原理。通过学习本章,你应该能对Scala是什么,以及它能够帮你完成哪类任务,有基本的感性认识。尽管本书是Scala的教程,单就本章而言,并不能算作教程的一部分。如果你已经迫不及待想现在就开始写Scala代码,请翻到第2章。
1.1 一门按需伸缩的语言
不同大小的程序通常需要不同的编程概念。比如下面这段小程序:
这个程序首先设置好国家和首都之间的一组映射,然后修改映射,添加一个新的绑定 ("Japan"->"Tokyo"),最后将法国(France)的首都(Paris)打印出来。[2]本例中用到的表示法高级、到位并且没有多余的分号或类型标注。的确,这段代码看上去感觉像是一款现代的“脚本”语言,比如Perl、Python或Ruby。这些语言的一个共通点,至少就从上面的示例而言,是它们各自都在语法层面支持某种“关联映射”(associative map)的结构。
关联映射非常有用,因为它们让程序精简可靠,不过有时你可能不同意这种“一体适用”(one size fits all)的哲学,因为你需要在你的程序中更为精细地控制映射结构的性质。Scala给你这种自由度,因为映射在Scala里并不是语言本身的语法,它们是通过类库实现的一种抽象,可以按需进行扩展和适配。
在上面这段程序中,得到的是默认的Map实现,不过改起来也很容易。比如说,可以指定一个特定的实现,如HashMap或TreeMap,也可以通过调用par方法得到一个并行执行操作的ParMap。可以指定映射中的默认值,也可以在创建的映射中重写任何方法。不论是哪一种定制,都可以复用跟示例中一样的易用语法来访问你的映射。
这个示例展示了Scala既能让你方便地编写代码,也提供了灵活度。Scala有一组方便的语法结构帮助你快速上手,以愉悦而精简的方式编程,同时,你也会很放心,你想实现的并不会超出语言能表达的范围。可以随时根据需要裁剪你的程序,因为一切都是基于类库模块,任由你选用和定制。
培育新类型
Eric Raymond首先提出了大教堂和市集的隐喻,用来描述软件开发。[3]大教堂指的是那种近乎完美的建筑,修建需要很长的时间,不过一旦建好,就很长时间不做变更。而市集则不同,每天都会有工作于其中的人们不断地对市集进行调整和扩展。在Raymond的著作里,市集用来比喻开源软件开发。Guy Steele在一次以“培育编程语言”为主题的演讲中提到,大教堂和市集的比喻也同样适用于编程语言的设计。[4]在这个意义上,Scala更像是市集而不是大教堂,其主要的设计目标就是让用Scala编程的人们可以对它进行扩展和定制。
举个例子,很多应用程序都需要一种不会溢出(overflow)或者说“从头开始”(wrap-around)的整数。Scala正好就定义了这样一个类型scala.BigInt。这里有一个使用该类型的方法,计算传入整数值的阶乘(factorial):[5]
现在如果你调用factorial(30),将得到
BigInt看上去像是内建的,因为可以使用整型字面量,并且对这个类型的值做*和-等操作符运算。但实际上它不过碰巧是Scala标准类库里定义的一个类而已。[6]就算没有提供这个类,Scala程序员也可以直接(比如对java. math.BigInteger做一下包装)实现。实际上,Scala的BigInt就是这么做的。
当然了,也可以直接使用Java的这个类。不过用起来并不会那么舒服,因为 ............
以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。
书云 Open E-Library » Scala编程(第3版) - (EPUB全文下载)