新書推薦:
《
南方谈话:邓小平在1992
》
售價:HK$
80.6
《
纷纭万端 : 近代中国的思想与社会
》
售價:HK$
109.8
《
中国古代文体形态研究(第四版)(中华当代学术著作辑要)
》
售價:HK$
168.0
《
朋党之争与北宋政治·大学问
》
售價:HK$
99.7
《
甲骨文丛书·波斯的中古时代(1040-1797年)
》
售價:HK$
88.5
《
以爱为名的支配
》
售價:HK$
62.7
《
台风天(大吴作品,每一种生活都有被看见的意义)
》
售價:HK$
53.8
《
打好你手里的牌(斯多葛主义+现代认知疗法,提升当代人的心理韧性!)
》
售價:HK$
66.1
編輯推薦:
阐述scala核心语法、编程方法与深层原理,内容实用,通俗易学
涵盖Scala实际开发中的重要知识点,实例丰富,代码注解详尽
突出可操作性,力图使读者通过实际操作掌握用Scala进行应用开发
內容簡介:
本书以Scala语言的核心语法为主线,通过大量实例代码循序渐进地介绍了Scala语言的语法特性。第1章介绍Scala语言及开发环境的安装、Intellij IDEA的使用、Scala语言的交互式命令行。第2~3章重点介绍Scala语言的基础语法结构。第4章,重点介绍Scala语言重要的数据结构collection(集合)。第5章,重点介绍Scala语言中面向函数编程的语法特性。第6~8章,重点介绍Scala语言面向对象编程的语法特性。第9章,介绍Scala语言中的模式匹配及原理。第10章,详细介绍Scala语言的类型系统。第11章,对Scala语言中的隐式转换及原理进行详细介绍。第12章,重点介绍Scala中的并发编程。第13章,介绍Java语言与Scala语言间的互操作。
本书还提供了所有实例的源代码与素材文件,供读者上机练习使用,读者可从网上下载本书资源文件。
本书适用于Scala语言初学者、爱好者,大数据开发人员,软件培训机构以及计算机专业的学生使用。
關於作者:
周志湖 电子科技大学计算机软件与理论专业硕士,研究方向为机器学习与模式识别,目前供职于绿城房地产集团信息管理部,担任平台架构师、数据开发主管。对传统数据仓库、基于Hadoop和Spark的大数据仓库架构有深入的研究。
牛亚真 中国科学院大学计算机信息处理与检索方向硕士,Hadoop大数据工程师,目前主要从事分布式环境下的数据分析、数据挖掘相关工作。
內容試閱 :
第1章 Scala入门
本章主要介绍Scala语言的特点、Scala开发环境搭建,如何进行Hello World应用程序的编写、Intelli IDEA常用快捷键的使用及Scala交互式命令行的使用。
1.1 Scala简介
Scala语言(Scalable Lanaguage)是集面向对象编程思想与函数式编程思想于一身的通用编程语言,由Martin Odersky教授及其领导的瑞士洛桑联邦高等理工学院程序方法实验室团队于2001年发明,然后于2004年对外发布,起初只能在Java虚拟机(JVM)上运行,随后团队又将Scala语言扩展到.Net平台上。目前Scala语言在.Net平台上运行仍然不够稳定,主要原因是Scala大量重用了Java语言提供的库,在.Net平台上使用时会存在不少问题,本书后续章节如果没有特别指出,描述的内容全部都是基于JVM平台的。
Scala语言在创立之初,并没有引起太多的关注,随着Apache Spark、Apache Kafka及Apache Gearpump等大数据处理框架的出现及爆发式增长,Scala语言在大数据处理、分布式计算等领域受到广泛关注。虽然这些大数据框架提供了多语言编程接口,但毕竟Scala语言是这些框架的原生开发语言,特别是对于那些想学习这些框架内核原理的工程师们来说,Scala语言已经成为大数据工程师们必备的编程语言之一。
为什么Apache Spark、Apache Kafka及Gearpump等大数据处理框架要使用Scala语言作为其原生开发语言呢?这是因为Scala语言具有以下特点。
(1)能够无缝集成Java语言:Scala语言能够与Java良好地进行互操作,事实上Scala语言可以看作是Java ,它完全兼容Java语言同时又提供了很多新特性。
(2)纯面向对象编程语言:Scala语言具有统一的对象模型,所有的值都是对象,而所有的操作都由消息发送完成。
(3)函数式编程语言:Scala语言也是函数式编程语言,提供了高阶函数(Higher-order functions) 、闭包(Closures)
、模式匹配(Pattern matching) 、单一赋值(Single
assignment ) 、延迟计算(Lazy evaluation) 、类型推导(Type inference )及尾部调用优化(Tail call
optimization) 等多种语法功能。
由于Scala语言的这些特点,与Java语言编写的代码相比,Scala的代码量要少很多。
1.2 Scala开发环境搭建
1.2.1 软件准备
Scala开发环境所需的软件如表1-1所示。
表1-1 Scala开发软件需求
软件名称 版本 用途与下载地址
JDK 1.7.0_79 Java语言的开发工具包,下载地址:
http:www.oracle.comtechnetworkjavajavasedownloadsjdk7-downloads-1880260.html
(续表)
软件名称
版本
用途与下载地址
Scala SDK 2.10.4 Scala语言的开发工具包,下载地址:
http:www.scala-lang.orgdownload2.10.4.html
IntelliJ IDEA 15.0.4 集成开发环境,用于进行Scala大型项目开发,下载地址:
http:www.jetbrains.comideadownload
1.2.2 JDK的安装与配置
运行jdk1.7.0_79.msi后,可以看到图1-1所示的界面。
图1-1 JDK安装启动界面
单击下一步按钮,可以看到图1-2所示的界面,开发工具和源代码都选择安装,然后将安装目录设置为C:\Java。
图1-2 定制安装界面
完成后单击下一步按钮,JDK会自动完成安装,完成后会弹出安装JRE提示,同样将其安装在C:\Java目录下即可。
配置环境变量,右键单击计算机,选择属性,如图1-3所示。
图1-3 系统配置页面
在控制面板主页单击高级系统设置,进入系统属性对话框,如图1-4所示。
图1-4 系统属性对话框
在高级选项卡中单击环境变量,进入环境变量配置对话框,在系统变量中单击新建,设置变量名为JAVA_HOME,设置变量值为C:\Java\jdk1.7.0_79,然后单击确定按钮完成设置。
图1-5 设置JAVA_HOME环境变量
在系统变量中查找名称为Path的环境变量,单击编辑,在变量中添加;%JAVA_HOME%\bin,然后单击确定按钮,如图1-6所示。
图1-6 添加bin目录到环境变量Path中
最后在系统变量中,单击新建按钮,设置变量名为CLASS_PATH、变量值为.;%JAVA_HOME%\lib,再单击确定按钮,至此完成了整个JDK的安装与配置。打开DOS,输入java version命令,可以看到图1-7所示的输出结果,则说明JDK安装成功。
图1-7 java version命令输出结果
1.2.3 Scala SDK的安装与配置
单击运行scala-2.10.4.msi,出现如图1-8所示的安装启动界面。
图1-8 Scala安装启动界面
单击next按钮,选择同意接受其License
Agreement条款并单击next按钮,进入图1-9所示的Scala安装定制界面,选择安装所有的组件并设置安装目录为C:\scala。
图1-9 Scala安装定制界面
单击next按钮,再单击install按钮,程序自动完成安装并将bin目录添加到系统环境变量中。打开DOS,输入scala version命令,如果有图1-10所示的输出结果,则表示Scala安装成功。
图1-10 scala version命令输出结果
1.2.4 Intellij IDEA的安装与配置
Intellij IDEA 15.0.4 社区版直接按默认条件安装即可,该版本的Intellij IDEA已经内置了Scala插件无需再手动安装。为方便后期讲解,这里先对Intellij IDEA整体界面[ ]进行完整的介绍,如图1-11所示。
1. 菜单和工具栏(Menus and toolbars):包含项目需要使用的大多数命令。
2. 导航栏(Navigation bar):显示当前项目及正在编辑的文件。
3. 状态栏(The status bar):显式项目、整个开发环境的状态,输出关于项目的警告及其他消息。
4. 编辑器(Editor):用于创建和修改代码。
5. 工具窗口(Tool windows):具备多种功能,包括查看项目的文件结构、编译执行程序等。
6. 左边界(Left gutter):用于设置代码断点、显示代码行号等。
7. 右边界(Right gutter):用于监测代码质量,包括显式代码出错、警告等信息,右上角会显示整个文件代码的质量情况。
图1-11 Intellij
IDEA整体布局
对于开发人员来说,最喜爱的使用风格是Darcula,在File
| Settings | Appearance Behaviour | Appearance中进行设置,如图1-12所示,将Theme设置为Darcula即可。
图1-12 设置Intellij IDEA 主题风格
不过,在正式使用Intellij IDEA进行Scala开发之前,需要查检Scala插件是否正常。启动Intellij IDEA,然后单击File-Setting,选择plugins,输入Scala可以查看Scala插件是否已经安装,如图1-13所示。如果你的Intellij IDEA版本没有自带Scala插件,则可以在此进行安装。
图1-13 查看Intellij IDEA 15.0.4中的Scala插件
1.3 Scala Hello World
1.3.1 创建Scala
Project
选择File | New| Project,就可以看到New
Project界面,如图1-14所示,在左侧工程类型栏选择Scala,右边也选择Scala,
图1-14 New
Project界面
然后单击Next按钮,进入工程配置页面,如图1-15所示。
图1-15 Scala工程配置页面
选择项目存放位置Project Location,输入项目名称,指定前面JDK安装目录设置Project SDK,指定前面Scala SDK安装目录设置Scala SDK,然后单击Finish按钮完成项目的创建,如图1-15所示。
图1-16
ScalaChapter01项目结构
1.3.2 配置项目代码目录结构
通过File|Project Structre打开项目配置页面,如图1-17所示。
图1-17 Project
Struture页面
在Projet Settings中有Project、Modules、Libraries、Facets及Artifacts 5项内容。Project用于设置Project SDK、编译输出文件目录等;Modules用于将大型工程分成多个模块,模块相互之间可能有依赖关系,各模块有自己的代码、单元测试代码、资源及脚本等;Libraries用于配置项目的依赖包;Facets用于提供特定框架如Web、Spring、Persistence的代码帮助,一般由IDE自动配置;Artifacts为工程生成的输出文件,可以是Java archive(JAR)、Web
Application Archive(WAR)及Enterprise
Archive(EAR)等,如果实际中使用了Maven等构建工具,则不需要手动配置,否则需要在此手动配置输出。
在Modules中,将项目代码目录结构配置为图1-18所示,源代码目录与测试代码分开放,Java代码放在java源文件中,Scala代码放在Scala源文件中。
图1-18 项目代码目录结构
1.3.3 创建应用程序对象
单击srcmainscala文件夹,右键|New|Scala
Class,如图1-19所示。
图1-19 创建Scala Class
打开Create New Scala Class对话框,如图1-20所示,在Name中输入HelloWorld,在Kind中选择Object。
图1-20 Create New
Scala Class对话框
完成后单击OK,这样便创建好了object
HelloWorld,如图1-21所示。
图1-21 object
HelloWorld
在编辑框内输入下列代码:
def mainargs: Array[String] {
println"Hello Scala
World!"
}
完整代码如图1-22所示。
图1-22 Scala
HelloWorld 完整代码
1.3.4 运行代码
通过快捷键Ctrl Shift F10或在代码编辑器中右键选择Run
HelloWorld,如图1-23所示。
图1-23 运行HelloWorld代码
代码会先经过编译然后运行,运行结果如图1-24所示,运行过程中编译生成的字码文件会放置在out文件夹中。
图1-24 HelloWorld程序运行结果
1.4 Intellij IDEA常用快捷键
1.4.1 代码编辑类常用快捷键
表1-2给出的是代码编辑器中的常用快捷键,其中最为常用的有:Ctrl 、Ctrl Shift 、Ctrl F、Ctrl R、Alt Enter。
表1-2 代码编辑类常用快捷键
快捷键 作用
Ctrl Shift Up(上移)
Ctrl Shift Down(下移) 移动选中的代码
Ctrl D 复制选中的代码
Ctrl Y 删除选中的代码
Ctrl 将选中的代码作为注释(未注释时);删除选中代码注释(已注释时)。适用于注释语法
Ctrl Shift 将选中的代码作为注释(未注释时);删除选中代码注释(已注释时)。适用于**注释语法
Ctrl F 在当前代码文件中查找
Ctrl R 在当前代码文件中查找并替换
Alt 左箭头 切换到前一Tab页打开的文件
Alt 右箭头 切换到后一Tab页打开的文件
Ctrl Alt T 使用if语句、for循环语句、while循环语句、try catch等语句包裹当前选中的代码
Alt Enter 代码快速修正
Ctrl :使用注释符对选中的代码进行注释或删除注释,如果代码之前没有被注释,则会加上注释,如果代码已经被注释,则会删除注释。
Ctrl Shift :使用**注释符对选中的代码进行注释或删除注释,如果代码之前没有被注释,则会加上注释,如果代码已经被注释,则会删除注释。
Ctrl F:用于在当前代码文件中查找,查找时可以选择是否区别大小写等,还可以使用正则表达式进行查找。
Ctrl R:用于在当前代码文件中查找并替换,同样也可以指定大小写,是否启用正则表达式,替换时可以选择逐个替换或全部替换。
Alt Enter:用于在代码出错时快速地给出修正提示,如使用的类没有引入时会弹出提示选项,供开发人员选择。
1.4.2 导航快捷键
表1-3给出了常用导航快捷键,其中最常用的是Ctrl N、Ctrl H。Ctrl N用于快速定位到相关类所在的代码文件,Ctrl H则用于显示类的继承关系结构。
表1-3 导航常用快捷键
快捷键 作用
Ctrl E 显示最近访问的文件
Ctrl N 导航到指定的类
Ctrl Shift N 导航到指定的文件或文件夹
Ctrl Shift Alt N 导航到指定的方法或成员变量
Ctrl H 显示类的继承关系
Shift Shift 在整个工程中包括资源文件、库文件等中查找
1.4.3 编译、运行及调试
表1-4中给出了在编译、运行及调试时常用的快捷键。
表1-4 编译、运行及调试常用快捷键
快捷键 作用
Ctrl F9 编译整个工程项目
Shift F10 运行当前代码文件
Shift F9 调试当前代码文件
Ctrl F8 设置断点
F7 Step into
F8 Step out
F9 恢复执行
Alt F8 表达式计算(Evaluate expression)
1.4.4 代码格式化
代码格式化常用快捷键,如表1-5所示。
表1-5 代码格式化常用快捷键
快捷键 作用
Ctrl Alt L 格式化代码
Ctrl Alt I 代码自动缩进
Ctrl Alt O 引入优化(例如删除未使用的引入)
1.5 交互式命令行使用
与Java语言相比,Scala提供了一个非常重要的语言学习工具,那就是REPL命令行(Read-Evaluate-Print-Loop Command),也称交互式命令行,它有点类似于Linux命令行,执行完程序后会立即显示程序运行结果,该工具对Scala语言学习者了解Scala语言特性大有裨益。本节将对3种常见的Scala语言交互式命令行进行介绍。
1.5.1 Scala内置交互式命令行
在Windows系统上,可以通过DOS命令行进入Scala SDK提供的Scala交互式命令行,直接在命令行上输入scala,然后回车便能进入Scala交互式命令行,如图1-25、图1-26所示。
图1-25 进入Scala交互式命令行界面
图1-26 进入REPL命令行
进入命令行之后,可以直接在命令行上输入要执行的命令,然后按回车键,便能看到程序的执行结果,如图1-27所示。
图1-27 REPL命令行程序运行结果
在REPL命令行中可以通过:help命令来获取帮助。
scala :help
All commands can be abbreviated, e.g. :he instead of :help.
Those marked with a * have more detailed help, e.g. :help imports.
:cp path add a
jar or directory to the classpath
:help [command] print this
summary or command-specific help
:history [num] show the
history optional num is commands to show
:h? string search
the history
:imports [name name ...] show import
history, identifying sources of names
:implicits [-v] show the
implicits in scope
:javap path|class
disassemble a file or class name
:load path load and
interpret a Scala file
:paste enter paste
mode: all input up to ctrl-D compiled tog
ether
:power enable power user
mode
:quit exit the
interpreter
:replay reset execution and replay all
previous commands
:reset reset the repl to
its initial state, forgetting all s
ession entries
:sh command line run a
shell command result is implicitly = List[Str
ing]
:silent disableenable automatic printing
of results
:type [-v] expr display the
type of an expression without evaluating
it
:warnings show the
suppressed warnings from the most recent lin
e which had any
1.5.2 Scala Console交互式命令行
Scala SDK提供的REPL命令行虽然很强大,但美中不足的是,当编写的代码较复杂的时侯,不能够像在IDE里面那样给出相应的代码提示。为解决这一问题,Intellij IDEA中提供了Scala Console 交互式命令行。可以使用快捷键Ctrl Shift D或通过Tools|Run Scala Console(如图1-28所示)来运行Scala Console。
图1-28 Run Scala
Console
运行成功后如图1-29所示。
图1-29 Scala
Console运行界面
Scala Console最大的特点是在输入代码时,会给出相应的提示,如图1-30所示。
图1-30 Scala
Console中的代码自动提示
代码输入完成后,按Ctrl Enter键便会执行输入的代码并给出结果,如图1-31所示。
Scala Console还有一个特点,就是可以回车换行,编写多个程序语句一起执行,而在Scala SDK提供的交互式命令行中如果要编写多个语句一起执行的话,需要使用;号将各条语句隔开或使用:paste命令。
图1-31 Scala
Console中的代码运行结果
1.5.3 Scala Worksheet的使用
在学习Scala时,还有一种比较方便的工具能够辅助我们快速得到Scala程序的运行结果,这便是Scala Worksheet,它通过File|New|Scala Worksheet创建,如图1-32所示,然后输入Worksheet的名称(本例中命名为HelloWorldWorksheet)。
图1-32 创建Scala Worksheet
创建完成后,在编辑器中输入Scala代码,然后保存,这样就能够在右侧看到代码运行结果,如图1-33所示。
图1-33 Scala
Worksheet中代码运行结果
在这3种交互式命令行中,Scala SDK提供的REPL命令行无代码提示功能而且执行多行代码时不方便,Scala WorkSheet需要创建Worksheet文件,运行完成后代码能够永久保留但运行速度较慢,特别是代码量较大时,每保存一次都要重新执行文件中的所有代码,而Scala Console在代码提示、代码执行速度方面都有明显的优势,因此建议大家使用Intellij
IDEA提供的Scala Console交互式命令行来学习Scala语言。
小 结
本章对Scala语言及其特点进行了介绍,给出了如何在Windows环境下进行Scala开发环境的搭建,然后演示了Scala版本HelloWorld程序的编程与运行,对集成开发环境Intellij IDEA中的常用快捷键进行了介绍,最后对Scala中原生的交互式命令行、Intelli IDEA中提供的Scala Console交互式命令行及Scala Worksheet的使用进行了说明。通过本章的学习,读者可以简单了解Scala语言的特点,掌握Scala开发环境的搭建及Scala常用交互式命令行的使用。