Scala基础
一、Scala简介与概述
Scala简介
- Scala源自Java
- Scala构建在JVM之上
- Scala与Java兼容、互通(❗ 不要混合编码)
- Scala的优势
- 多范式编程:支持面向对象编,程、面向过程编程、函数式编程等多种编程范式(函数式编程是Spark的重中之重)
- 表达能力强,代码精简
- 大数据与Scala
- Spark采用Scala语言设计
- 提供的API更加优雅
- 基于JVM的语言更融入Hadoop生态圈
- Spark采用Scala语言设计
Scala概述
-
面向对象特性
- 每个值都是对象
- 在Scala中,包括基本类型都是对象。每个值都是某个类的实例,每个操作都是方法调用。
-
对象的数据类型和行为由类(Class)和特征
(Trait,类似于interface)描述- Trait不仅具有Java中接口的功能,还引入了混入式多重继承的概念,同时可以包含方法的实现和变量定义。
- 混入式多重继承:允许在实例化时或之后,将多个Trait混入一个类中
- 动态混入:直接面向对象编写代码。允许在对象实例化时或对象使用过程中,动态地将一个或多个Trait添加到类的实例中(方便开发者根据需要在运行时为对象添加新的行为或状态)
- 混入式多重继承:允许在实例化时或之后,将多个Trait混入一个类中
- Trait不仅具有Java中接口的功能,还引入了混入式多重继承的概念,同时可以包含方法的实现和变量定义。
- 每个值都是对象
-
函数式编程
-
每个函数都是一个值
- 在Scala中,每个函数都必须返回一个值。
- 在Scala中,函数不需要写return,最后一个表达式的类型就是函数的返回类型。
-
支持高阶函数,柯里化(currying),样例类(case class)及模式匹配…
-
高阶函数:Scala中提供了大量的函数,90%的算法都无需我们自己去写,我们只需要"拼图"即可。
-
柯里化:多参数列表
-
样例类:Java类的简化版
-
模式匹配:将数据延伸、变形、转化的过程语法简化
-
-
-
Scala是静态类型语言
-
扩展性:隐式类、字符串插值
-
隐式:Scala包括隐式类、隐式变量、隐式函数(Scala中的高阶函数中包含了大量的隐式函数)
可用于将多个函数的共性逻辑声明为一个隐式函数,并将其自动传进去,可实现隐式转换
-
Scala代码规范
- 通常一行一条命令,末尾无需添加分号。
- 若一行包含多条命令,两两之间用分号隔开。(【建议】非特殊语法不允许主动用分号隔开命令)
三、理解Scala变量与数据类型
Scala的变量与常量
- 创建变量
- 创建变量必须赋初值
- 可以不指定变量的具体类型,如:var a = 12。则变量的类型由首次赋值的值类型决定且锁定。
- 若声明时已指定变量类型,如:var a:String = “”,则类型不可更改。
var variableName[:Type] = V
- 创建常量
- 创建常量且初始化后,常量的类型和值都将锁定。
val valName[:Type] = V
- 类型别名
type Alias = Type
Scala的数据类型
菱形式 数据类型
- Any
- Anything(基本类型)
- Unit (≈void)
- Boolean
- Byte
- Short
- Int
- Long
- Float
- Double
- BigInt
- BigDecimal
- AnyRef(引用类型)
- String
- List
- SelfDefinedClass
- Anything(基本类型)
- Null是所有引用类型的子类,Nothing是所有类的子类