文档章节

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

o
 osc_a22drz29
发布于 2019/03/23 09:29
字数 4037
阅读 36
收藏 0

精选30+云产品,助力企业轻松上云!>>>

第一章 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 开发团队。
  


  正是基于上面的原因,所以 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 的关系 (重要!!!)
  

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、

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_HOME
export SCALA_HOME=/opt/module/scala/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin

6、使配置文件生效 source /etc/profile
7、测试,命令: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 的开发。
  IDEA 的安装与配置详解:https://www.cnblogs.com/chenmingjun/p/10290183.html

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 程序。[内部会有编译和运行过程]
效果截图:


对 scala 程序基本结构说明:

1.8.2 linux 下开发步骤

步骤如下:
  1、直接使用 vim 开发,一个遍历数组的案例。
  2、将 Scala 代码编写到扩展名为 HelloScala.scala 的文件中。[代码说明]
  3、通过 scala 命令对该 scala 文件进行编译,生成 .class 字节码文件。
  4、在终端执行 scala HelloScala 就可以看到运行效果。
  5、注意:通过 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 执行流程分析

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 这个文件夹,进行关联,最后,可以看到源码

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

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 类似。但是语句后面不需要加上分号。
  • 简述:在配置环境、编译、运行各个步骤中常见的错误。
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

Pycharm文件打开方式

Pycharm修改文件默认打开方式 新下载了一个Pycharm,建了个小demo,期间产生了一个sqlite3文件,由于是第一次打开,就弹出选择打开方式的对话框,手一块直接点了个Text,然后就乱码了: 那我...

osc_fi9eaftu
16分钟前
8
0
微信域名检测中反应速度的重要性

随着微信域名检测的普及,越来越多的人重视这方面有个客户是这样跟我说的,他现在用的那个检测有频率限制 最快只能一秒检测一个, 并发多的时候是不能边跳转边检测的, 只能写到计划任务里面...

mkapi01
17分钟前
18
0
状压dp大总结1 [洛谷]

前言 状态压缩是一种\(dp\)里的暴力,但是非常优秀,状态的转移,方程的转移和定义都是状压\(dp\)的难点,本人在次总结状压dp的几个题型和例题,便于自己以后理解分析状态和定义方式 状态压缩...

osc_s28jz759
18分钟前
17
0
aspnet core 2.1中使用jwt从原理到精通一

目录 原理; 根据原理使用C#语言,生成jwt; 自定义验证jwt; 使用aspnetcore 中自带的类生成jwt; 学有所得 了解jwt原理; 使用C#轻松实现jwt生成和验证 原理 jwt对所有语言都是通用的,只要...

osc_1ls4yaq1
19分钟前
6
0
github上DQN代码的环境搭建,及运行(Human-Level Control through Deep Reinforcement Learning)conda配置

最近师弟在做DQN的实验,由于是强化学习方面的东西,正好和我现在的研究方向一样于是我便帮忙跑了跑实验,于是就有了今天的这个内容。 首先在github上进行搜寻,如下图: 发现第一个星数最多...

osc_252iaxru
20分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部