Skip to content

第 1 章 Scala 入 门

1.1 概述

  • Spark—新一代内存级大数据计算框架,是大数据的重要内容。
  • Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。
  • Spark的兴起,带动Scala语言的发展!

1.1.1 为什么学习 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.2 Scala 发展历史

1.1.3 Scala 和 Java 关系

一般来说,学 Scala 的人,都会 Java,而 Scala 是基于 Java 的,因此我们需要将 Scala

和 Java 以及 JVM 之间的关系搞清楚,否则学习 Scala 你会蒙圈。

image-20221022144057986

1.1.4 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 环境搭建

1) 安装步骤

(1) 首先确保 JDK1.8 安装成功

(2) 下载对应的Scala 安装文件 scala-2.12.11.zip

(3) 解压 scala-2.12.11.zip,我这里解压到D:Tools

(4) 配置 Scala 的环境变量

image-20221022144402733

image-20221022144413844

注意 1:解压路径不能有任何中文路径,最好不要有空格。注意 2:环境变量要大写SCALA_HOME

2) 测试

需求:计算两数 a 和b 的和。步骤

(1) 在键盘上同时按win+r 键,并在运行窗口输入cmd 命令

image-20221022144528876

(2) 输入Scala 并按回车键,启动 Scala 环境。然后定义两个变量,并计算求和。

1.3 Scala 插件安装

默认情况下 IDEA 不支持Scala 的开发,需要安装Scala 插件。

1) 插件离线安装步骤

( 1 ) 建议将该插件 scala-intellij-bin-2017.2.6.zip 文件,放到 Scala 的安装目录D:Toolsscala-2.12.11 下,方便管理。

image-20221022150222075

(2)打开 IDEA,在左上角找到 File->在下拉菜单中点击 Setting... ->点击 Plugins->点击右 下 角 Install plugin from disk… , 找 到 插 件 存 储 路 径D:Toolsscala-2.12.11scala-intellij-bin-2017.2.6.zip,最后点击 ok。

2) 插件在线安装(可选)

(1) 在搜索插件框里面输入 Scala->点击 Install->点击 ok->点击 apply。

image-20221022150248445

重启 IDEA,再次来到 Scala 插件页面,已经变成 Installed。

image-20221022150340592

1.4 HelloWorld 案例

1.4.1 创建IDEA 项目工程

1) 打开 IDEA->点击左侧的 Flie->选择 New->选择Project…

image-20221022152624834

2)创建一个 Maven 工程,并点击 next

image-20221022152630437

3) GroupId 输入com.neuedu->ArtifactId 输入 scala->点击 next->点击 Finish

image-20221022152702107

注意:工程存储路径一定不要有中文和空格。

4) 指定项目工作目录空间

image-20221022152715277

5) 默认下,Maven 不支持 Scala 的开发,需要引入 Scala 框架。

在 scala0513 项目上,点击右键-> Add Framework Support... ->选择 Scala->点击 OK

image-20221022152724132

注意:如果是第一次引入框架,Use libary 看不到,需要选择你的 Scala 安装目录,然后工具就会自动识别,就会显示 user libary。

6) 创建项目的源文件目录

右键点击 main 目录->New->点击 Diretory -> 写个名字(比如 scala)。

右键点击 scala 目录->Mark Directory as->选择 Sources root,观察文件夹颜色发生变化。

image-20221022152731789

7) 在 scala 包下,创建包 com.neuedu.chapter01 包名和 Hello 类名,

右键点击 scala 目录->New->Package->输入 com.neuedu.chapter01->点击 OK。

右键点击 com.neuedu.chapter01->New->Scala Class->Kind 项选择 Object->Name 项输入Hello。

image-20221022152957173

8) 编写输出Hello Scala 案例

在类中中输入 main,然后回车可以快速生成 main 方法; 在 main 方法中输入println("hello scala")

ttttttttttttttttttScala1714.png)

scala
package com.neuedu.chapter01

/**
 * @auth 金山老师
 *       creatime: 2022-10-22 15:30
 *       描述 : ${dc}
 */
object Hello {

  def main(args: Array[String]): Unit = {
    println("Hello Scala")

    System.out.println("Hello Scala from Java code");
  }
}

运行后,观察控制台打印输出:

image-20221022153430917

说明:Java 中部分代码也是可以在 Scala 中运行。

1.4.2 class 和object 说明

对第一个程序进行说明

  • main:方法名
  • 小括号表示参数列表
    • 参数声明方式: java -类型参数名
      • scala -参数名:类型
  • public修饰符: scala中没有public关键字, 如果不声明访问权限,那么就是公共的。
  • static修饰符: scala中没有静态语法,所以没有static关键字。
  • void关键字:表示返回做,但是不遵循面向对象语法,所以scala中没有, 但是有Unit类型,表示没有返回做

Scala

  • scala中:方法名 (参数列表) :返回值类型
  • scala中声明方法必须采用关键字def声明
  • scala中方法实现法值给方法声明,所以中间需要等号连接
  • Scala是- 一个完全面向对象的语言,所以没有静态语法,为了能调用静态语法(模仿静态语法),
    • 采用件生对象单例的方式调用方法
scala
package com.neuedu.chapter01

/**
 * @auth 金山老师
 *       creatime: 2022-10-22 15:30
 *       描述 : ${dc}
 */
object Hello {

  def main(args: Array[String]): Unit = {
    println("Hello Scala")

    System.out.println("Hello Scala from Java code");
  }
}
  • Scala完全面向对象,故Scala去掉了Java中非面向对象的元素,如static关键字,void类型

    • static

      • Scala无static关键字,由object实现类似静态方法的功能(类名.方法名)。
      • class关键字和Java中的class关键字作用相同,用来定义一个类;
    • void

      对于无返回值的函数,Scala定义其返回值类型为Unit类

1.4.3 Scala 程序反编译

1) 在项目的 target 目录 Hello 文件上点击右键->Show in Explorer->看到 object 底层生成

Hello$.class 和 Hello.class 两个文件

2) 采用 Java 反编译工具 jd-gui.exe 反编译代码,将 Hello.class 拖到 jd-gui.exe 页面

ttttttttttttttttttScala2015.png)

ttttttttttttttttttScala2016.png)

ttttttttttttttttttScala2045.png)

1.5 关联Scala 源码

在使用 Scala 过程中,为了搞清楚 Scala 底层的机制,需要查看源码,下面看看如何关联和查看 Scala 的源码包。

1) 查看源码

例如查看 Array 源码。按住 ctrl 键->点击Array->右上角出现 Attach Soures…

ttttttttttttttttttScala2184.png)

ttttttttttttttttttScala2185.png)

2) 关联源码

(1) 将我们的源码包 scala-sources-2.12.11.tar.gz 拷贝到 D:Toolsscala-2.12.11lib 文件夹下,并解压为 scala-sources-2.12.11 文件夹

(2) 点击 Attach Sources…->选择 D:Toolsscala-2.12.11libscala-sources-2.12.11,这个

文件夹,就可以看到源码了

ttttttttttttttttttScala2386.png)

1.6 官方编程指南

1) 在线查看:https://www.scala-lang.org/

2) 离线查看:解压 scala-docs-2.11.8.zip,可以获得Scala 的API 操作。

ttttttttttttttttttScala2525.png)

Released under the MIT License.