一、Scala概述及环境搭建
大数据核心:数据采集、海量数据存储、数据计算
多范式的编程语言:面向对象/函数式编程(柯里化、偏函数、高阶函数、纯函数、函数作为参数传递,提倡递归)
Spark的兴起带动了Scala的发展
编程思想、语法思想
提升高效、简洁,但降低维护性、阅读性
大数据应用工程师、大数据算法工程师
scala、java、JVM关系
1.能够部分使用java的语法
2.Scala特有语法(比如元组)
3.增加了函数式编程
4.从形式上看是Scala类,但实际上是对java的类/借口进行封装
Scala肯定比Java复杂
Scala特点 //表达和演说、技术,综合能力(靠一个能力很难)
静态编程语言:提前确定类型。PHP、Python动态语言,动态加载
简洁高效
学习建议:1.学习Scala特有语法;2.搞清楚Java和Scala的相同点和不同点;3.如何规范使用Scala
安装路径不要有中文、空格、特殊字符
Scala快速入门:
Idea常用的快捷键
scalac会生成两个class文件。理解这两个文件的调用顺序。静态类型分为两部分:静态的写到object,非静态写到class里面。(动静分离)语法糖
scala:参数名写在前面,类型写后面。go,存储过程。
IDEA创建maven项目:新建scala包,make directory as source,默认无法写scala程序需要加入scala框架
object Test对应的是一个Test$的一个静态对象MODULE$,在程序中是一个单例对象
编译运行一步执行
字符串输出的三种方式:
1.字符串拼接+(类似于Java)
2.格式化输出(类似于C)
3.使用$输出(类似于PHP) ${语句运算}
关联源码:解压两次关联
文档注释,scaladoc -d
关联源码:scala-解压两次,attach
013讲
代码规范:ctrl+alt+l 格式化代码
二、Scala基本语法
014讲:
1.变量
难得不是技术,难得是业务、以及性能优化(怎么跑的更快)
变量 堆栈关系,编译器(动态、逃逸分析)
1) 声明变量时, 类型可以省略(就是叫 类型推断);2) 类型确定后,就不能修改,说明 Scala 是强数据类型语言;3) 声明一个变量之后,都是修改属性,很少改变这个变量本身。在声明/定义一个变量时,可以使用 var 或者 val 来修饰: var 修饰的变量可改变,val 修饰的变量不可改[案例].(推荐使用 val,线程安全,使用效率高);4) val 修饰的变量在编译后,等同于加上 final;5) var 修饰的对象引用可以改变,val 修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如: 自定义对象、数组、集合等等) [分析 val 好处];6) 变量声明时,需要初始值
2.数据类型(016讲)
1) Scala 与 Java 有着相同的数据类型,在 Scala 中数据类型都是对象,//在 scala 中,一切皆为对象 ,比如(Int,Float,Char....);也就是说 scala 没有 java 中的原生类型;2) Scala 数据类型分为两大类 AnyVal(值类型) 和 AnyRef(引用类型), 注意:不管是 AnyVal 还是 AnyRef 都是对象。[案例演示 Int , Char]
AnyVal
AnyRef 类/对象
底层类:Null,Nothing,赋给任何类。
自定义隐式转换
1) Any 是所有类的根类型,即所有类的父类(基类)
2) 在 scala 中类分为两个大的类型分支(AnyVal [值类型,即可以理解成就是 java 的基本数据类型], AnyRef 类型)
3) 在 AnyVal 虽然叫值类型,但是仍然是类(对象)
4) 在 scala 中有两个特别的类型(Null ), 还有一个是 Nothing
5) Null 类型只有一个实例 null, 他是 bottom class ,是 AnyRef 的子类.
6) Nothing 类型是所有类的子类, 它的价值是在于因为它是所有类的子类,就可以将 Nothing 类型的对象返回给任意的变量或者方法,比如案例
def f1():Nothing= { //表示 f1 方法就是没有正常的返回值,专门用于返回异常
throw new Exception("异常发生")
}
7) 在 scala 中仍然遵守低精度的数据自动的转成 高精度的数据类型。
8) 在 scala 中,Unit 类型比较特殊,这个类型也只有一个实例 ()
特点
相对于 java 的类型系统,scala 要复杂些!也正是这复杂多变的类型系统才让面向对象编程和函数式编程完美的融合在了一起
3.整型
2.4.1 整型的使用细节
1) Scala 各整数类型有固定的表数范围和字段长度,不受具体 OS 的影响,以保证 Scala 程序的可移植性。
2) Scala 的整型 常量/字面量 默认为 Int 型,声明 Long 型 常量/字面量 须后加‘l’’或‘L’ [反编译看]
3) Scala 程序中变量常声明为 Int 型,除非不足以表示大数,才使用 Long, 开发大数据时,我们的优化工作是点点滴滴
var e = 1239299999999999999 //错误,默认int类型
4.浮点型
默认double
5.字符类型