Scala的设计理念
简单的说就是讲不同语言中的多个概念融合在一起
Scala的函数式编程和面向对象编程
略
六大特征
- Java和Scala混编
- 类型推断
- 并发和分布式(Actor)
- 特质,特征(类似java中的接口和抽象类)
- 模式匹配
- 高阶函数
类和对象
对象object
- 方法和变量都是静态的
- 定义常量用val
- object不可以传参
类 class
- 变量用var, 常量用val
- 一行代码不需要分号分割
- 驼峰命名方法
- 类可以传参, 就有了默认的构造函数, 勒种默认属性就有了getter和setter方法
- 当创建一个class, 除了方法不执行其他都会执行
- scala中class和object同名, 这个class叫做这个object的伴生类, object是这个class的伴生对象, 就可以互相访问私有变量.
- 同一个包里面,类名不能重复
scala版九九乘法表
1 | object NineNineMultiplicationTable { |
函数
函数返回值
- 如果需要函数返回值可以在最后写 “=”
递归函数
- 递归函数返回值需要显示声明
参数有默认值的函数
- 直接在函数参数写”=”
可变参数函数
1 | def fun(array: String*) { |
匿名函数
1 | ()=> { |
嵌套函数
1 | def f1(a: Int) { |
偏应用函数
- 固定函数不变的参数,可变的参数将其用”_”表示,并复制给一个变量,这是只需要传可变的参数即可
高阶函数
- 函数的参数是函数
- 函数的返回值是函数
- 函数的参数和返回值是函数
1 | def f1(a: Int, b: Int): Int = { |
集合列表数组
数组
1 | //Array |
列表
1 | // list |
map和flatmap的区别?
- 前者是处理返回下一个处理结果的数组类型, split返回List[Array[String]], 一对一
- 后者直接返回List[String], 一对多
Set, 去重无序
map键值对
1 | val map = Map(1 -> "a", 2 -> "b") |
元组
最多支持22个元素
new可写可不写
- 迭代器便利 productIterator
特质 Trait
- 不可以传参
- 可以被多继承 extends
模式匹配
1 | def matchTest(a: Any) { |
Actor 是通信模型, Spark底层节点之间的通信就是Akka, Akka是通信模型, Akka是Actor实现的.
Actor相当于Java线程-Thread, 解决了锁的机制
- 消息队列, 异步
注意引入的时候,actor已经被遗弃, 用akka取代
1 | //sbt方式 |
简单使用
1 | class MyActor extends Actor { |