编辑推荐
阐述scala核心语法、编程方法与深层原理,内容实用,通俗易学
涵盖Scala实际开发中的重要知识点,实例丰富,代码注解详尽
突出可操作性,力图使读者通过实际操作掌握用Scala进行应用开发
内容简介
《Scala开发快速入门》以Scala语言的核心语法为主线,通过大量实例代码循序渐进地介绍了Scala语言的语法特性。第1章介绍Scala语言及开发环境的安装、IntellijIDEA的使用、Scala语言的交互式命令行。第2~3章重点介绍Scala语言的基础语法结构。第4章,重点介绍Scala语言重要的数据结构collection(集合)。第5章,重点介绍Scala语言中面向函数编程的语法特性。第6~8章,重点介绍Scala语言面向对象编程的语法特性。第9章,介绍Scala语言中的模式匹配及原理。第10章,详细介绍Scala语言的类型系统。第11章,对Scala语言中的隐式转换及原理进行详细介绍。第12章,重点介绍Scala中的并发编程。第13章,介绍Java语言与Scala语言间的互操作。
《Scala开发快速入门》还提供了所有实例的源代码与素材文件,供读者上机练习使用,读者可从网上下载《Scala开发快速入门》资源文件。
《Scala开发快速入门》适用于Scala语言初学者、爱好者,大数据开发人员,软件培训机构以及计算机专业的学生使用。
作者简介
周志湖,电子科技大学计算机软件与理论专业硕士,研究方向为机器学习与模式识别,目前供职于绿城房地产集团信息管理部,担任平台架构师、数据开发主管。对传统数据仓库、基于Hadoop和Spark的大数据仓库架构有深入的研究。
牛亚真,中国科学院大学计算机信息处理与检索方向硕士,Hadoop大数据工程师,目前主要从事分布式环境下的数据分析、数据挖掘相关工作。
目录
第1章Scala入门1
1.1Scala简介2
1.2Scala开发环境搭建2
1.2.1软件准备2
1.2.2JDK的安装与配置3
1.2.3ScalaSDK的安装与配置5
1.2.4IntellijIDEA的安装与配置6
1.3ScalaHelloWorld8
1.3.1创建ScalaProject8
1.3.2配置项目代码目录结构9
1.3.3创建应用程序对象11
1.3.4运行代码12
1.4IntellijIDEA常用快捷键13
1.4.1代码编辑类常用快捷键13
1.4.2导航快捷键14
1.4.3编译、运行及调试15
1.4.4代码格式化15
1.5交互式命令行使用15
1.5.1Scala内置交互式命令行15
1.5.2ScalaConsole交互式命令行17
1.5.3ScalaWorksheet的使用19
小结20
第2章变量及基本数据类型21
2.1变量22
2.1.1变量定义22
2.1.2lazy变量23
2.2基本数据类型24
2.2.1Int类型24
2.2.2Float类型25
2.2.3Double类型25
2.2.4Char类型25
2.2.5String类型26
2.2.6Boolean类型27
2.3基本类型操作27
2.3.1算术运算操作27
2.3.2关系运算操作28
2.3.3逻辑运算操作28
2.3.4位运算操作29
2.3.5对象比较运算操作30
2.3.6字符串运算操作31
2.4运算符的优先级32
2.5元组类型33
2.6符号类型34
小结35
第3章程序控制结构36
3.1if语句37
3.1.1if语句37
3.1.2if…else…语句37
3.1.3if...elseif...else…语句37
3.1.4if的嵌套使用38
3.1.5if表达式39
3.2while循环语句39
3.2.1while语句的使用39
3.2.2dowhile语句的使用40
3.3for循环语句41
3.3.1基础for循环41
3.3.2有过滤条件的for循环44
3.3.3多重for循环44
3.3.4作为表达式的for循环45
小结45
第4章集合46
4.1集合简介47
4.2数组49
4.2.1定长数组49
4.2.2变长数组ArrayBuffer50
4.2.3数组的遍历52
4.2.4遍历生成数组53
4.2.5常用函数53
4.3.6多维数组54
4.3列表(List)55
4.3.1列表的创建55
4.3.2List常用函数56
4.3.3List伴生对象方法58
4.4集(Set)59
4.5映射(Map)61
4.6队列(Queue)63
4.7栈(Stack)64
小结66
第5章函数67
5.1函数68
5.2值函数69
5.2.1值函数的定义69
5.2.2值函数的简化71
5.3高阶函数73
5.3.1高阶函数的定义73
5.3.2高阶函数的使用74
5.4闭包78
5.5函数柯里化80
5.6部分应用函数81
5.7偏函数83
小结85
第6章Scala面向对象编程(上)86
6.1类与对象87
6.1.1类的定义87
6.1.2创建对象88
6.1.3类成员的访问88
6.1.4单例对象90
6.1.5应用程序对象91
6.1.6伴生对象与伴生类93
6.2主构造函数96
6.2.1主构造函数的定义96
6.2.2默认参数的主构造函数98
6.2.3私有主构造函数99
6.3辅助构造函数100
6.3.1辅助构造函数的定义100
6.3.2辅助构造函数中的默认参数102
6.4继承与多态104
6.4.1类的继承104
6.4.2构造函数执行顺序107
6.4.3方法重写108
6.4.4多态109
6.5成员访问控制111
6.5.1默认访问控制112
6.5.2protected访问控制113
6.5.3private访问控制114
6.5.4private[this]访问控制116
6.5.5主构造函数中的成员访问控制121
6.6抽象类125
6.6.1抽象类的定义125
6.6.2抽象类的使用126
6.7内部类与内部对象128
6.8匿名类130
小结131
第7章Scala面向对象编程(下)132
7.1trait简介133
7.2trait的使用135
7.2.1trait的几种不同用法135
7.2.2混入trait的类对象构造138
7.2.3提前定义与懒加载140
7.3trait与类144
7.3.1trait与类的相似点144
7.3.1trait与类的不同点146
7.4多重继承问题147
7.5自身类型148
小结151
第8章包(package)152
8.1包的定义153
8.2包的使用和作用域155
8.2.1包的使用155
8.2.2包作用域156
8.3包对象159
8.4import高级特性160
8.4.1隐式引入160
8.4.2引入重命名160
8.4.3类隐藏161
小结162
第9章模式匹配163
9.1模式匹配简介164
9.2模式匹配的7大类型167
9.2.1常量模式167
9.2.2变量模式167
9.2.3构造函数模式169
9.2.4序列模式170
9.2.5元组模式171
9.2.6类型模式172
9.2.7变量绑定模式173
9.3模式匹配原理174
9.3.1构造函数模式匹配原理174
9.3.2序列模式匹配原理176
9.4正则表达式与模式匹配177
9.4.1Scala正则表达式177
9.4.2正则表达式在模式匹配中的应用180
9.5for循环中的模式匹配183
9.6模式匹配与样例类、样例对象185
9.6.1模式匹配与样例类185
9.6.2模式匹配与样例对象187
小结190
第10章隐式转换191
10.1隐式转换简介192
10.2隐式转换函数193
10.2.1隐式转换函数的定义193
10.2.2隐式转换函数名称194
10.3隐式类与隐式对象195
10.3.1隐式类195
10.3.2隐式对象196
10.4隐式参数与隐式值197
10.4.1隐式参数197
10.4.2隐式值199
10.4.3隐式参数使用常见问题201
10.5隐式转换规则与问题204
10.5.1隐式转换的若干规则204
10.5.2隐式转换需注意的问题208
小结210
第11章类型参数211
11.1类与类型212
11.2泛型214
11.2.1泛型类215
11.2.2泛型接口与泛型方法216
11.2.3类型通配符217
11.3类型变量界定220
11.4视图界定222
11.5上下文界定223
11.6多重界定226
11.7协变与逆变227
11.8高级类型230
11.8.1单例类型231
11.8.2类型投影235
11.8.3类型别名237
11.8.4抽象类型238
11.8.5复合类型240
11.8.6函数类型241
小结243
第12章Scala并发编程基础244
12.1Scala并发编程简介245
12.1.1重要概念245
12.1.2Actor模型247
12.1.3Akka并发编程框架247
12.2Actor249
12.2.1定义Actor249
12.2.2创建Actor250
12.2.3消息处理255
12.2.4Actor的其他常用方法260
12.2.5停止Actor261
12.3TypedActor265
12.3.1TypedActor定义265
12.3.2创建TypedActor266
12.3.3消息发送267
12.3.4停止运行TypedActor269
12.4Dispatcher271
12.4.1常用Dispatcher271
12.4.2ExecutionService274
12.5Router277
12.6容错279
12.6.1Actor的4种容错机制279
12.6.2Supervison279
小结285
第13章Scala与Java的互操作286
13.1Java与Scala集合互操作287
13.1.1Java调用Scala集合287
13.1.2Scala调用Java集合288
13.1.3Scala与Java集合间相互转换分析289
13.2Scala与Java泛型互操作290
13.2.1Scala中使用Java泛型291
13.2.2Java中使用Scala泛型291
13.3Scalatrait在Java中的使用293
13.4Scala与Java异常处理互操作298
小结299
参考文献300
前言/序言
为什么要写这《Scala开发快速入门》
ApacheSpark、ApacheKafka等基于Scala语言实现的框架在大数据生态圈内占有举足轻重的地位,它们一定程度上引领着大数据最前沿的技术方向,另外Akka、ApacheGearpump等基于Scala语言实现的框架在大数据生态圈内也备受关注,工业实践已经证明了Scala语言的强大,这使Scala语言近一两年名声大噪,进而引起众多编程语言爱好者及各大公司的亲睐,国内外也因此掀起了一场学习Scala语言的热潮。
Scala语言基于JVM平台,能够与Java语言进行良好地互操作,它最大的特点是可以将面向对象编程语言与函数式编程语言的特点结合起来。Scala语言的简洁性和表达能力,使得Scala语言与Java语言相比,同样的功能用Scala实现代码量要少很多。Scala语言的众多优点,让许多业内名家对其推崇备至,这其中便有Java之父JamesGosling和Groovy语言创始人JamesStrachan。
“IfIweretopickalanguagetousetodayotherthanJava,itwouldbeScala.”[](如果现在让我选择使用除Java之外的一门语言的话,那一定是Scala)——Java之父JamesGosling
“ThoughmytipthoughforthelongtermreplacementofjavacisScala.I'mveryimpressedwithit!IcanhonestlysayifsomeonehadshownmetheProgramminginScalabookbyMartinOdersky,LexSpoon&BillVennersbackin2003I'dprobablyhavenevercreatedGroovy.”(我认为将来可能替代javac的就是Scala,它极大地震撼了我,老实说如果有人在2003年把MartinOdersky、LexSpoon和BillVenners写的那本《ProgramminginScala》书拿给我看了的话,那我可能就不会再去发明Groovy语言了)[]——Groovy(另一种基于JVM平台的语言)创始人JamesStrachan。
目前国内Scala方面教材的短缺一定程度上限制了Scala语言在国内的普及,《Scala开发快速入门》试图弥补这一空白。
《Scala开发快速入门》内容
《Scala开发快速入门》是笔者在Scala学习、工作实践及培训过程中的心得体会和系统总结。内容涵盖Scala语言基础知识,包括变量的定义、程序控制结构、Scala集合操作;Scala语言中级知识,包括Scala函数式编程、Scala面向对象编程、Scala模式匹配;Scala语言高级编程知识,包括Scala类型参数、隐式转换、Scala并发编程、Scala与Java互操作。书中利用大量的具体示例和实际案例来说明Scala语言的应用,既能够掌握核心语法,又能够理解其背后的深层次原理。
读者对象
(1)Spark、Kafka等框架二次开发人员
Spark、Kafka等大数据处理框架目前在稳定性、扩展性方面虽然已经取得了长足的进步,但在实际使用时难免遇到问题,此时需要深入到内核源代码中分析问题,在理解其架构原理与实现细节的基础上通过修改内核源代码来解决问题,这需要开发人员有很强的Scala语言功底。
(2)Spark、Kafka等框架应用开发人员
在学习Spark、Kafka等Scala语言实现的大数据技术框架时,这些框架大多都提供了Java、Scala、Python等上层应用API编程接口,但仅仅学会使用其上层API是不够的,因为上层API抽象程度较高,各框架的底层实现细节、设计原理等对开发人员来说是一个黑匣子,在遇到性能等问题时,开发人员如果对底层实现细节不熟悉的话可能很难进行程序的性能优化。
(3)Spark、Kafka等框架运维工程师
目前Spark、Kafka等大数据处理框架基本上已经成为各大公司大数据解决方案的标配,但基于开源解决方案常常会面临一些技术风险,框架本身的问题及实际应用场景的不同可能会遇到很多故障,因此对于这些使用Scala语言实现的框架而言,运维工程师也需要知晓各框架的底层细节,这样才能够迅速定位问题并找到合适的解决办法。
(4)从事大数据技术的Java开发人员
Scala语言完全兼容Java语言,Scala语言中大量使用了Java语言现有的库,因此如果你是一个Java大数据开发人员,在此建议学习Scala语言,相信它会给你带来全新的感受,甚至有抛弃Java的念头。
(5)大数据技术开源爱好者
Spark、Kafka等是大数据技术框架中的明星,Scala语言已经通过了工业界的检验,学习Scala语言为学习这些框架的设计原理打下坚实的基础,为以后参与开源、学习工业界最先进的大数据技术架构的优秀思想打下了坚实的基础。
如何阅读《Scala开发快速入门》
《Scala开发快速入门》涵盖三大主要部分:
(1)Scala语言基础篇,主要介绍Scala语言入门基础知识、变量的定义、程序控制结构、Scala集合。
(2)Scala语言中级篇,主要介绍Scala函数式编程、Scala面向对象编程、Scala模式匹配。
(3)Scala语言高级篇,主要介绍Scala类型参数、隐式转换、Scala并发编程、Scala与Java互操作。
如果你是一名初学者,请按照书的顺序从第一章基础理论部分开始学习,学习时先认真看书中的代码示例和说明,然后照着代码亲自动手实践,这样可以达到事半功倍的学习效果;如果你是一名Scala资深用户,你可以自由阅读各章内容,相信书中部分内容肯定能够给你带来一些新的启发。
资源下载
《Scala开发快速入门》代码可以从pan.baidu.com/s/1nvyDC1r(注意数字和字母大小写)下载。如果下载有问题,请电子邮件联系booksaga@163.com,邮件标题为“Scala开发快速入门-代码”。
勘误和支持
由于笔者水平有限,加之编写时间仓促,书中难免出现一些错误或不准确的地方,恳请读者批评指正。有任何问题联系,编者将尽最大努力及时为读者提供相应的解答。
编者
2016年6月于杭州