天天看点

大数据技术之_16_Scala学习_01_Scala 语言概述

​​第一章 Scala 语言概述​​​​1.1 why is Scala 语言?​​​​1.2 Scala 语言诞生小故事​​​​1.3 Scala 和 Java 以及 jvm 的关系分析图​​​​1.4 Scala 语言的特点​​​​1.5 Windows 下搭建 Scala 开发环境​​​​1.6 Linux 下搭建 Scala 开发环境​​​​1.7 Scala 的开发工具​​​​1.7.1 IDEA介绍​​​​1.7.2 Scala 插件安装​​​​1.8 Scala 的开发快速入门​​​​1.8.1 windows 下开发步骤​​​​1.8.2 linux 下开发步骤​​​​1.8.3 IDEA 下开发步骤​​​​1.8.4 使用 java 写一段模拟代码,来模拟 scala 的执行流程​​​​1.8.5 Scala 执行流程分析​​​​1.8.6 Scala 程序开发注意事项(重点)​​​​1.9 Scala 语言转义字符​​​​1.10 Scala 语言输出的三种方式​​​​1.11 Scala 源码的查看的关联​​​​1.12 注释​​​​1.12.1 介绍​​​​1.12.2 Scala 中的注释类型​​​​1.12.3 文档注释案例​​​​1.12.4 scala 的代码规范说明​​​​1.12.5 正确的注释和注释风格​​​​1.12.6 正确的缩进和空白​​​​1.12.7 Scala 官方编程指南​​​​1.13 本章知识回顾​​

第一章 Scala 语言概述

1.1 why is Scala 语言?

1、Spark--新一代​

​内存级​

​大数据计算框架,是大数据的重要内容。

2、Spark 就是使用 Scala 编写的。因此为了更好的学习 Spark, 需要掌握 Scala 这门语言。

3、Scala 是 Scalable Language 的简写,是一门多范式(范式=编程方式[面向对象/函数式编程])的编程语言。

4、联邦理工学院洛桑(EPFL)的 Martin Odersky(马丁·奥德斯基) 于 2001 年开始设计 Scala(斯卡拉)。

5、Spark 的兴起,带动 Scala 语言的发展!

1.2 Scala 语言诞生小故事

  创始人马丁·奥德斯基 (Martin Odersky) 是编译器及编程的狂热爱好者,长时间的编程之后,希望发明一种语言,能够让写程序这样的基础工作变得高效、简单。所以当接触到 JAVA 语言后,对 JAVA 这门便携式、运行在网络、且存在垃圾回收的语言产生了极大的兴趣,所以决定将函数式编程语言的特点融合到 JAVA 中,由此发明了两种语言(Pizza & Scala)。 (大量使用递归)

  jdk5.0 的泛型、for 循环增强,、自动类型转换等,都是从 Pizza 引入的新特性。

  jdk8.0 的类型推断、Lambda 表达式 就是从 scala 引入的特性。

  Pizza 和 Scala 极大地推动了 Java 编程语言的发展。[如何理解?]

  且现在主流 JVM 的 javac 编译器就是 马丁·奥德斯基 编写出来的。并被 JAVA 编程人员广泛的使用,所以 Scala 语言起源于 Java,却推动着 Java 的发展,它们是相辅相成的。Jdk5.0、Jdk8.0 的编译器就是 马丁·奥德斯基 写的,因此 马丁·奥德斯基 是一个人的战斗力抵得上一个 Java 开发团队。

  

大数据技术之_16_Scala学习_01_Scala 语言概述
  正是基于上面的原因,所以 Scala 源代码 (.scala) 会被编译成 Java 字节码 (.class),然后运行于 JVM 之上,并可以调用现有的 Java 类库,实现两种语言的无缝对接,因此,对于已经掌握 JAVA 语言的我们来讲,学习起来一定会略显轻松。  Scala 是一门以 java 虚拟机(JVM) 为目标运行环境并将​

​面向对象​

​和​

​函数式编程​

​的最佳特性结合在一起的​

​静态类型编程语言​

​。(运行之前一定知道类型是什么)

1.3 Scala 和 Java 以及 jvm 的关系分析图

  一般来说,学 Scala 的人,都会 Java,而 Scala 是基于 Java 的,因此我们需要将 Scala 和 Java 以及 JVM 之间的关系搞清楚,否则学习 Scala 你会蒙圈。

  建议:如果没有任何 Java 基础的同学,先学 Java,至少要学习 JavaSE,再学习 Scala。

  我们分析一下:Scala 和 Java 以及 jvm 的关系 (重要!!!)

大数据技术之_16_Scala学习_01_Scala 语言概述

1.4 Scala 语言的特点

  Scala 是一门以 java 虚拟机(JVM) 为运行环境并将​

​面向对象​

​函数式编程​

​静态类型编程语言(编译型语言)​

​。(动态类型语言:javascript、python、php 解释型语言)

  Scala 是一门多范式 (multi-paradigm) 的编程语言,Scala 支持面向对象和函数式编程。

  Scala 源代码 (.scala) 会被编译成 Java 字节码 (.class),然后运行于 JVM 之上,​

​并可以调用现有的 Java 类库,实现两种语言的无缝对接​

​。[案例演示]

  scala 单作为一门语言来看,非常的简洁高效。[对 三元运算,++,-- 等进行简化]

  Scala 在设计时,马丁·奥德斯基 是参考了 Java 的设计思想,可以说 Scala 是源于 java,同时 马丁·奥德斯基 也加入了自己的思想,将函数式编程语言的特点融合到 JAVA 中, 因此,对于学习过 Java 的同学,只要在学习 Scala 的过程中,搞清楚 Scala 和 java 相同点和不同点,就可以快速的掌握 Scala 这门语言。

  快速有效掌握 Scala 的建议 [1、学习 scala 特有的语法。2、搞清楚 scala 和 java 区别。 3、如何规范的使用 scala。]

1.5 Windows 下搭建 Scala 开发环境

安装&配置

  1、Scala 需要 Java 运行时库,安装 Scala 需要首先安装 JVM 虚拟机并配置好,推荐安装 JDK1.8。

  2、在 http://www.scala-lang.org/ 下载 Scala2.11.8 程序安装包

  3、配置 Jdk 的环境变量

  4、配置 SCALA_HOME,​

​SCALA_HOME= D:\program\scala-2.11.8​

  5、将 Scala 安装目录下的 bin 目录加入到 PATH 环境变量,在 PATH 变量中添加:​

​%SCALA_HOME%\bin​

  6、在终端中输入 “scala” 命令打开 scala 解释器

1、

2、

大数据技术之_16_Scala学习_01_Scala 语言概述

3、

1.6 Linux 下搭建 Scala 开发环境

  在实际开发中,我们的项目是部署到 linux 上,因此,我们需要在 Linux 下搭建 scala 的环境。Linux 下安装 Scala 的原理机制一样,操作的具体步骤:

1、下载对应的 scala 的安装软件 scala-2.11.8.tgz

2、通过远程登录工具,将安装软件上传到对应的 Linux 系统(xshell6 和 xftp6)

3、mkdir /opt/module/scala 创建目录

4、解压:​

​$ tar -zvxf /opt/software/scala-2.11.8.tgz -C /opt/module/scala/​

5、配置环境变量 vim /etc/profile

在该文件中配置 scala 的 bin 目录 /opt/module/scala/scala-2.11.8/bin

#SCALA_HOMEexport SCALA_HOME=/opt/module/scala/scala-2.11.8export PATH=$PATH:$SCALA_HOME/bin      

6、使配置文件生效 source /etc/profile

7、测试,命令:scala

大数据技术之_16_Scala学习_01_Scala 语言概述

Scala 的 REPL:

  上面打开的 scala 命令行窗口,我们称之为 REPL,是指:Read Evaluation Print Loop,也称之为交互式解释器。类似于 MySQL 的默认客户端工具。在命令行窗口中输入 scala 指令代码时,解释器会读取指令代码并计算(Evaluation)对应的值,然后将结果打印(Print)出来,接着循环等待用户输入指令(Loop)。

  从技术上讲,这里其实并不是一个解释器,而是指令代码被快速的编译成 Java 字节码并被 JVM 加载执行。最终将执行结果输出到命令行中。

1.7 Scala 的开发工具

1.7.1 IDEA介绍

  IDEA 全称 IntelliJ IDEA,是用于 java 语言开发的集成环境(也可用于其他语言),IntelliJ 在业界被公认为最好的 java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格。

  java 开发工具很多,比如 netbean、eclipse 等等,单开发 Scala 可选的工具不多,主要使用 IDEA。

  Idea 工具开发 Scala 的快捷键也不是很多,所以使用相对比较简单。

  IDEA 不是专门用于开发 Scala 的 IDE,但是确是最适合开发 Scala 的工具,因为在我们实际工作中,大部分是开发项目,而大数据项目不可避免的会使用到 Java, 所以会进行 Java 和 Scala 两种语言的混合编程。 而 Idea 可以很好的支持 Java 和 Scala 的开发。

1.7.2 Scala 插件安装

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

操作的具体步骤:

1、下载插件:scala-intellij-bin-2017.2.6.zip,下载地址:https://plugins.jetbrains.com/plugin/1347-scala,找到对应的版本

2、建议该插件文件放到 scala 的安装目录,我们新建文件夹 /plugin,方便我们管理

3、将插件安装到 idea

4、打开 idea,先找到安装插件的位置 File -> Settings -> Plugins -> Installplugin from disk… -> 选择插件的路径 -> OK -> OK

5、点击 OK,重启 idea

1.8 Scala 的开发快速入门

  需求说明:要求开发一个 Hello.scala 程序,可以输出 “hello world!" [对 scala 程序基本结构说明]。

1.8.1 windows 下开发步骤

步骤如下:

  1、可以直接使用文本开发工具[Sublime Text 3]。

  2、将 Scala 代码编写到扩展名为 HelloScala.scala 的文件中。[ 说明: 比如将源码在目录 D:\demo\ScalaDemo 下 ]

  3、通过 scalac 命令对该 scala 文件进行编译,生成 .class 文件。[和javac类似]

  4、命令行下执行 scala HelloScala 就可以看到运行效果。

  5、​

​注意​

​:scala HelloScala 命令可以直接运行 HelloScala.scala 程序。[内部会有编译和运行过程]

效果截图:

大数据技术之_16_Scala学习_01_Scala 语言概述

对 scala 程序基本结构说明:

1.8.2 linux 下开发步骤

  1、直接使用 vim 开发,一个遍历数组的案例。

  2、将 Scala 代码编写到扩展名为 HelloScala.scala 的文件中。[代码说明]

  3、通过 scala 命令对该 scala 文件进行编译,生成 .class 字节码文件。

  4、在终端执行 scala HelloScala 就可以看到运行效果。

​注意​

​:通过 scala HelloScala 命令可以直接运行 HelloScala.scala 程序。

代码如下:

/**  * 只要以后看到 object HelloScala,我们就应该有如下认识:  *     1、object HelloScala 对应的是一个 HelloScala$ 类型的静态对象 MODULE$。  *     2、object HelloScala 在程序运行中是单例存在的。  */object HelloScala {  def main(args: Array[String]): Unit = {    println("hello scala")  }}      

1.8.3 IDEA 下开发步骤

  使用文本工具开发项目可以很好的理解运行原理,但是不利于开发综合项目,所以在实际开发中我们要使用 Idea 来开发。

  1、新建一个 Maven 工程,在工程的 main 目录下新建一个 scala 文件夹,将该文件夹标记为【源码文件夹】,方便管理。右键 scala -> Mark Directory as -> Sources Root

  2、默认情况下,不能写 scala 程序,需要我们引入 scala 框架(即将该工程关联上 scala),选中该项目右键 -> Add Framework Support… -> 勾选左侧 Scala -> 指定 Scala 安装的主目录 -> OK。

  3、在 scala 文件夹上右击,选择新建一个 Scala 类,勾选 Kind 为 Object,如下图所示:

  4、开发一个 HelloScala.scala 程序。

  5、运行后,就可以看到输出。

1.8.4 使用 java 写一段模拟代码,来模拟 scala 的执行流程

package com.atguigu.chapter01.Test;
/** * @author chenmingjun * 2019-03-22 18:25 */
/** * 可以理解我们在 main 中写的代码放在 HelloScala$ 的 mian 里,即 scala 在底层运行的时候,编译器做了一个包装。 */public class HelloScala {
public static void main(String[] paramArrayOfString) {        HelloScala$.MODULE$.main(paramArrayOfString);    }}
final class HelloScala$ {    public static final HelloScala$ MODULE$;
static {        MODULE$ = new HelloScala$();    }
public void main(String[] args) {        System.out.println("hello scala");    }}      

1.8.5 Scala 执行流程分析

大数据技术之_16_Scala学习_01_Scala 语言概述

1.8.6 Scala 程序开发注意事项(重点)

注意事项:

  1、Scala 源文件以 “.scala" 为扩展名。

  2、Scala 程序的执行入口是 main() 函数。

  3、Scala 语言严格区分大小写。

  4、Scala 方法由一条条语句构成,每个语句后不需要分号(​

​Scala 语言会在每行后自动加分号​

​),这也体现出 Scala 的简洁性。

  5、如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号。

1.9 Scala 语言转义字符

\t      :一个制表位,实现对齐的功能\n      :换行符\\      :一个\\"      :一个"\r      :一个回车  println("hello\rk");       

1.10 Scala 语言输出的三种方式

  1、字符串通过+号连接(类似java)。

  2、printf 用法(类似C语言)字符串通过 % 传值。

  3、字符串通过 $ 引用(类似PHP)。

示例代码:

package com.atguigu.chapter01
/**  * @author chenmingjun  *         2019-03-22 19:14  */object PrintDemo {
def main(args: Array[String]): Unit = {    val str1: String = "hello"    val str2: String = "world"    // 连接打印    println(str1 + str2)
val name: String = "tom"    val age: Int = 10    val sal: Float = 10.67f    val height: Double = 180.75    // 格式化输出    printf("名字=%s 年龄=%d 薪水=%.2f 身高=%.3f", name, age, sal, height)
// scala 支持使用 $ 输出内容    println(s"个人信息如下1:\n 名字$name\n 年龄$age\n 薪水$sal\n")    // 如果字符串中出现了类似 ${age + 10} ,则表示 {} 是一个表达式    println(s"个人信息如下2:\n 名字${name}\n 年龄${age + 10}\n 薪水${sal}\n")  }}      

输出结果:

helloworld名字=tom 年龄=10 薪水=10.67 身高=180.750个人信息如下1:名字tom年龄10薪水10.67
个人信息如下2:名字tom年龄20薪水10.67      

1.11 Scala 源码的查看的关联

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

1、查看源码, 选择要查看的方法或者类, 输入 Ctrl + B 或者 双击

当我们没关联源码时,会看到如下图:

我么可以点击 Download… 自动下载源码,也可以手动关联源码。

2、手动关联源码

源码包下载地址:https://www.scala-lang.org/download/2.11.8.html,修改我们下载的源码包 scala-2.11.8.tar.gz 包名为 scala-sources-2.11.8.tar.gz,为了方便识别

步骤一:将我们的源码包拷贝至 scala/lib 文件夹下(scala-sources-2.11.8.tar.gz),这样为了方便管理,然后进行解压(因为 IDEA 不识别 xxx.tar.gz 这种格式的压缩包)

步骤二:关联即可,点击 Attach Sources…,选中 scala-sources-2.11.8 这个文件夹,进行关联,最后,可以看到源码

大数据技术之_16_Scala学习_01_Scala 语言概述

1.12 注释

1.12.1 介绍

  用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性。

  注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。

1.12.2 Scala 中的注释类型

  1、单行注释:格式:// 注释文字

  2、多行注释:格式: /* 注释文字 */

  3、文档注释:注释内容可以被工具 scaladoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。

1.12.3 文档注释案例

  1、打开文件所在的目录,选中文件右键 -> Show in Explorer

  2、在命令行窗口中输入 ​

​scaladoc -d d:/mydoc Comment.scala​

​ 可以生成对应的文档说明。

示例代码如下:

package com.atguigu.chapter01
/**  * 文档注释案例  * @author chenmingjun  *         2019-03-23 0:22  */object Comment {  def main(args: Array[String]): Unit = {    println("hello world")  }
/**    * @deprecated 过期    * @example    *          输入 n1 = 10 n2 = 20 return 30    * @param n2    * @return 求和    */  def sum(n1: Int, n2: Int): Int = {    return n1 + n2  }}      

1.12.4 scala 的代码规范说明

1.12.5 正确的注释和注释风格

  查看 Scala 源码。

1.12.6 正确的缩进和空白

  1、使用一次 tab 操作,实现缩进,默认整体向右边移动,使用 Shift + Tab 整体向左移。

  2、或者使用 Ctrl + Alt + L 来进行格式化代码。

  3、运算符两边习惯性各加一个空格。比如:2 + 4 * 5。

  4、一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅。

1.12.7 Scala 官方编程指南

API 下载地址:https://www.scala-lang.org/download/2.11.8.html

大数据技术之_16_Scala学习_01_Scala 语言概述

1.13 本章知识回顾

  • Scala 语言的 sdk 是什么?答:Scala 的类库。
  • Scala 环境变量配置及其作用。

    配置 SCALA_HOME=D:\learn\Scala\scala-2.11.8

    配置 Path=%SCALA_HOME%\bin

  • Scala 程序的编写、编译、运行步骤是什么?能否一步执行??

    编写:就是使用工具,开发 scala 程序。

    编译:就是将 .scala 文件编译成 .class 【命令:scalac]】。

    运行:就是使用 scala 来将 .class 文件加载到 jvm 并运行,可以直接运行 .scala, 但是速度慢。【命令:scala xxx.scala】。

  • Scala 程序编写的规则。

    // 规范基本上和 java 类似。但是语句后面不需要加上分号。

  • 简述:在配置环境、编译、运行各个步骤中常见的错误。

Copyright ©2018-2019

【转载文章务必保留出处和署名,谢谢!】