Scala是一门怎样的语言,具有哪些优点?
- 快速实验
- 一致性
- 面向对象
- 函数式编程
- 函数可以独立存在,可以定义一个函数作为另外一个函数的返回值,也可以接受函数作为函数的参数
- 异步编程
- 函数式编程提倡变量不可变,使得异步编程变得十分容易
- 基于JVM
- Scala会被编译成为Bytecode,所以Scala能无缝集成已有的Java类库
Scala语法基础-从Hello World说起

Scala值和变量声明
- val变量和var变量
- val声明的变量不可变,相当于java中的final
- var声明的变量可变
- 在scala的类中,val会自动带有getter方法,var会自动带有getter和setter方法
Scala常用类型
- Scala没有区分基本类型和包装类型,统一定义为class类。
- 7种数值类型+1种Boolean类型
- Byte -> RichByte
- Char -> RichChar
- Short -> RichShort
- Int -> RichInt
- Long -> RichLong
- Float -> RichFloat
- Double -> RichDouble
- 在基本数据类型上使用那些没有提供的方法时,scala会尝试“隐式转换”转换成增强类型
- Example
-
1.to(10) // 生成出Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
方法的定义和使用
• 方法定义
• 格式
def 方法名(参数名: 参数类型): 返回值类型 = {
return xxx // return可省略
}
• 当返回值为unit时
def 方法名(参数名: 参数类型) {
// 方法体
}
• 无参数函数定义
def 方法名 {
// 方法体
}
• Example
def m1(a: Int, b: Int): Int = {
a + b
}
def m2() = 100
def m3 = 100
函数的定义和使用
- 函数定义
- 函数在scala中是一等公民
- val 函数名:(参数类型1, … , 参数类型n)=>返回值类型 = (T1,…, Tn) => 函数体
- val 函数名 = (参数名1: 参数类型1, … , 参数名n: 参数类型n) =>函数体
- 函数必须有参数列表,否则报错
• val f1 = => 100 // 错误
• val f2 = () => 100 // 正确
函数与方法区别
- 方法不可以赋值给变量但是函数可以
- 对于一个无参数的方法是没有参数列表的,而对于函数是有一个空参数列表。
- 函数名后必须加括号才代表函数调用,否则为该函数本身,而方法名后不加括号为方法调用
Example - 方法计时器

循环和高级for循环


常见集合使用
- C 操作时间为常数
- eC 操作时间在满足某些假设的前提下为常数
- aC该操作的均摊运行时间为常数。某些调用的可能耗时较长,但多次调用之下,每次调用的平均耗时是常数。
- L 操作是线性的,耗时与容器的大小成正比。

异常处理

- 如果在.map, .flatMap中遇到异常如何处理?
- Scala提供了scala.util.Try 类型更加优雅的处理异常
- 如果成功返回Success
- 如果抛出异常返回Failure并携带异常信息
类定义

类构造函数

类继承
- Scala继承类和java一样使用extends关键字
- 可以将类、字段或者方法声明为final,确保它们不能被重写
- 重写一个非抽象方法必须使用override关键词
- 可以将类定义为abstract作为抽象类,子类中重写超类的抽象方法时不
需要使用override关键词
- 调用超类与Java一致使用super关键词
- 只有主构造器才能调用超类的构造器
单例对象

函数式编程思想
- 函数式编程关心的是数据的映射而命令式编程关心的是解决问题的步骤
- 函数式编程提倡
- 没有可变的变量
- 例如无论sqrt(x),这个函数的值只取决于函数的输入的值
- 没有类似于命令式编程中循环元素
- 好处
- 不依赖于外部的状态,也不修改外部的状态,使得代码容易推理,
单元测试和调试变得十分容易
- 由于多个线程之前不共享状态,因此不会造成资源的竞争,可以更
好的支持并发
函数式编程思想Example

相关文章: