1.Scala 入门
第 1 章 Scala 入门
1.1 概述
1.1.1 为什么学习 Scala
1)Spark—新一代内存级大数据计算框架,是大数据的重要内容。
2)Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。
3)Spark的兴起,带动Scala语言的发展。(大数据内行业重器 -Spark)
1.1.2 Scala 发展历史
联邦理工学院的马丁·奥德斯基(Martin Odersky)于2001年开始设计Scala。
马丁·奥德斯基是编译器及编程的狂热爱好者,长时间的编程之后,希望发明一种 语言,能够让写程序这样的基础工作变得高效,简单。所以当接触到JAVA语言后,对 JAVA这门便携式,运行在网络,且存在垃圾回收的语言产生了极大的兴趣,所以决定 将函数式编程语言的特点融合到JAVA中,由此发明了两种语言(Pizza & Scala)。
Pizza和Scala极大地推动了Java编程语言的发展。
JDK5.0 的泛型、增 强for循环、自动类型转换等,都是从Pizza引入的新特性。
JDK8.0 的类型推断、Lambda表达式就是从Scala引入的特性。
JDK5.0和JDK8.0的编辑器就是马丁·奥德斯基写的,因此马丁·奥德斯基一个人的 战斗力抵得上一个Java开发团队。
1.1.3 Scala 和 Java 关系
一般来说,学 Scala 的人,都会 Java,而 Scala 是基于 Java 的,因此我们需要将 Scala 和 Java 以及 JVM 之间的关系搞清楚,否则学习 Scala 你会蒙圈。
Scala和Java及JVM关系图

1.1.4 Scala 语言特点
Scala 语言特点
Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的 静态类型编程语言(静态语言需要提前编译的如:Java、c、c++等,动态语言如:js)。
Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。(多范式,就是多种编程方 法的意思。有面向过程、面向对象、泛型、函数式四种程序设计方法。)
Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有 的Java类库,实现两种语言的无缝对接。
Scala单作为一门语言来看,非常的简洁高效。
Scala在设计时,马丁·奥德斯基是参考了Java的设计思想,可以说Scala是源于Java,同时马丁·奥 德斯基也加入了自己的思想,将函数式编程语言的特点融合到JAVA中, 因此,对于学习过Java的同学, 只要在学习Scala的过程中,搞清楚Scala和Java相同点和不同点,就可以快速的掌握Scala这门语言。
1.2 Scala 环境搭建
安装步骤
官方下载:https://www.scala-lang.org/download/
(1)首先确保 JDK1.8 安装成功
(2)下载对应的 Scala 安装文件 scala-2.12.11.zip
(3)解压 scala-2.12.11.zip,我这里解压到 D:\software
(4)配置 Scala 的环境变量

注意 1:解压路径不能有任何中文路径,最好不要有空格。
注意 2:环境变量要大写 SCALA_HOME
测试
需求:计算两数 a 和 b 的和。

反编译分析
1 | object HelloScala{ |
执行scalac编译源文件会得到两个文件
HelloScala$.class
HelloScala.class

将生成的字节码反编译
1 | import scala.reflect.ScalaSignature; |
1 | // 明显看出来是一个单例 HelloScala$ |

1.3 HelloWorld案例
默认情况下 IDEA 不支持 Scala 的开发,需要安装 Scala 插件。
1. 新建一个Maven项目

2. 添加scala插件

3. 建立一个scala的根目录(直接在Java下开发也行)

4. 添加框架支持


5. 在 scala 包下,创建包 com.zzxx.chapter01 包名和 Hello 类名,
右键点击 scala 目录->New->Package->输入 com.zzxx.chapter01->点击 OK。
右键点击 com.zzxx.chapter01->New->Scala Class->Kind 项选择 Object->Name 项输入 Hello。

6. 编写输出 Hello Scala 案例
在类中输入 main,然后回车可以快速生成 main 方法;
在 main 方法中输入 println(“hello scala”)

说明:Java 中部分代码也是可以在 Scala 中运行。
对HelloWorld程序进行说明
main方法名
- 小括号表示参数列表
- 参数声明方式:java→类型 参数名
- scala->参数名: 类型
public修饰符: scala中没有public关键字,如果不声明访问权限,那么就是公共的。
static修饰符: scala中没有静态语法,所以没有static关键字。
void关键字:表示返回值,但是不遵循面向对象语法,所以scala中没有,但是有Unit类型,表示没有返回值scala中:方法名(参数列表):返回值类型
scala中声明方法必须采用关键字def声明
scala中方法实观赋值给方法声明,所以中间需要等号连接
Scala是一个完全面向对象的语言,所以没有静态语法,为了能调用静态语法(模仿静态语法),
- 采用伴生对系单例的方式调用方法
1.4 关联 Scala 源码
在使用 Scala 过程中,为了搞清楚 Scala 底层的机制,需要查看源码,下面看看如何关 联和查看 Scala 的源码包。
1)查看源码
例如查看 Array 源码。按住 ctrl 键->点击 Array->右上角出现 Attach Soures…

2)关联源码
1、将我们的源码包 scala-sources-2.12.11.tar.gz 拷贝到 D:\Tools\scala-2.12.11\lib 文件夹 下,并解压为 scala-sources-2.12.11 文件夹
2、点击 Attach Sources…->选择 D:\Tools\scala-2.12.11\lib\scala-sources-2.12.11,这个文件夹,就可以看到源码了

官方编程指南
1)在线查看:https://www.scala-lang.org/
2)离线查看:解压 scala-docs-2.11.8.zip,可以获得 Scala 的 API 操作。




