大数据技术之_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 开发团队。
正是基于上面的原因,所以 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 类似。但是语句后面不需要加上分号。 - 简述:在配置环境、编译、运行各个步骤中常见的错误。
大数据技术之_16_Scala学习_01_Scala 语言概述的更多相关文章
- 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作
第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...
- 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础
第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...
- 大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配
第十一章 数据结构(下)-集合操作11.1 集合元素的映射-map11.1.1 map 映射函数的操作11.1.2 高阶函数基本使用案例1+案例211.1.3 使用 map 映射函数来解决11.1.4 ...
- 大数据技术之_16_Scala学习_07_数据结构(上)-集合
第十章 数据结构(上)-集合10.1 数据结构特点10.1.1 Scala 集合基本介绍10.1.2 可变集合和不可变集合举例10.2 Scala 不可变集合继承层次一览图10.2.1 图10.2.2 ...
- 大数据技术之_16_Scala学习_02_变量
第二章 变量2.1 变量是程序的基本组成单位2.2 Scala 变量的介绍2.2.1 概念2.2.2 Scala 变量使用的基本步骤2.3 Scala 变量的基本使用2.4 Scala 变量使用说明2 ...
- 大数据技术之_16_Scala学习_05_面向对象编程-中级
第七章 面向对象编程-中级7.1 包7.1.1 Java 中的包7.1.2 Scala 中的包7.1.3 Scala 包的特点概述7.1.4 Scala 包的命名7.1.5 Scala 会自动引入的常 ...
- 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值
第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...
- 大数据技术之_16_Scala学习_09_函数式编程-高级
第十三章 函数式编程-高级13.1 偏函数(partial function)13.1.1 提出一个需求,引出思考13.1.2 解决方式-filter + map 返回新的集合13.1.3 解决方式- ...
- 大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(重点)
第1章 Flume概述1.1 Flume定义1.2 Flume组成架构1.2.1 Agent1.2.2 Source1.2.3 Channel1.2.4 Sink1.2.5 Event1.3 Flum ...
随机推荐
- 解题:HAOI 2015 按位或
题面 Min-Max容斥:对于集合S $min(S)=\sum_{s∈S}(-1)^{|s|+1}max(s)$ $max(S)=\sum_{s∈S}(-1)^{|s|+1}min(s)$ 那么这个题 ...
- (转)Maven学习总结(一)——Maven入门 安装使用
备注 转自: 孤傲苍狼 http://www.cnblogs.com/xdp-gacl/p/3498271.html 只为成功找方法,不为失败找借口! 1. Maven的基本概念 Maven(翻译为& ...
- Python基础学习(二)
前一段时间学习了Python数据类型,语句和函数,目前书写python的新特性,继续练手!!!! 一.切片 之前我们从python的list 或者 tuple中取得元素都是这样写,显然不够灵活 lis ...
- CSS框架960Grid从入门到精通一步登天
http://blog.chinaunix.net/uid-22414998-id-2878529.html 1.什么是CSS框架? CSS框架是一种你能够使用在你的web项目中概念上的结构, ...
- requestMapping之地址映射
转:http://www.cnblogs.com/qq78292959/p/3760560.html 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时, ...
- python---django中orm的使用(1)
首先推荐两篇文章:Django之ORM操作,http://www.cnblogs.com/yuanchenqi/articles/6083427.html十分全面. 另外和python---ORM之S ...
- bzoj千题计划223:bzoj2816: [ZJOI2012]网络
http://www.lydsy.com/JudgeOnline/problem.php?id=2816 每种颜色搞一个LCT 判断u v之间有边直接相连: 如果u和v之间有边相连,那么他们的深度相差 ...
- spring框架学习(一)入门
spring 入门--IOC 1.导入jar包 4 + 1 : 4个核心(beans.core.context.expression) + 1个依赖(commons-loggins...jar) ...
- 小记 HTML5 file对象
<input type="file" id="myfile" multiple> 这是个很普通的 file 上传组件,multiple 是支持多选, ...
- [转载]AngularJS之Factory vs Service vs Provider
http://www.oschina.net/translate/angularjs-factory-vs-service-vs-provider http://tylermcginnis.com/a ...