一、 函数简化原则
1、 定义变量/常量时数据类型可以省略
2、 函数调用问题上的简化规则
1、 在scala函数调用中都需要通过对象.函数名(参数列表)来进行调用,其中点可以省略,使用空格代替
2、 在函数调用时如果参数列表只有一个或者没有,调用的时候可以不加()
3、 函数定义过程中的简化规则
1、如果函数有返回值,return可以省略,使用函数逻辑上的最后一行代码来作为函数的返回值
2、 如果函数的函数体只有一行代码,函数体的{}可以省略
3、 函数的返回值类型可以省略,根据函数体逻辑上的最后一行代码来进行判断,但是当函数体逻辑上的最后一行代码
使用return返回了数据,那么函数的返回值类型就无法省略
4、 如果函数的返回值类型明确为Unit类型,那么函数的返回值类型以及=都可以省略
5、 如果函数定义的时候,函数没有形参,那么定义函数的时候形参列表的()可以省略
二、函数的高阶使用
scala是一门纯函数式编程语言,在scala中,函数可以声明在任何位置
1、 函数可以当作变量值来传递
var f:函数类型 = 函数名
var f = 函数名 _
如果f显示的声明了函数类型,那么右边的函数名就不需要加_
函数名 _ 代表将函数当作一个整体赋值给一个变量
2、 函数当作参数来使用
def fun(参数是一个函数):Unit => {}
通常结合匿名函数来使用
3、 匿名函数的简化原则
- 当匿名函数当作参数或者返回值来使用时,匿名函数的形参列表可以省略,会自动推断
- 当匿名函数的形参个数只有一个时,匿名函数的形参列表的()可以省略
- 如果匿名函数的函数体只有一行,匿名函数的函数体的{}就可以省略
- 如果匿名函数的所有形参在函数体中只出现一次,那么形参和=>都可以省略,函数体当中的形参使用_来代替
- 如果匿名函数有多个参数,多个参数在函数体也只出现了一次,也可以这样简化,简化的时候第一个_代表匿名函数形参的第一个参数值,第二个_代表第二个形参值
4、 scala的惰性机制
调用函数时,我们想要在使用函数返回值的时候再调用该函数,这时就需要用到scala的惰性机制
- lazy val 变量 = 函数的调用
注意点:lazy不能修饰var变量,只能修饰val常量
5、 scala的递归函数
函数内部又调用了自己的函数
6、 scala函数的闭包
函数声明在另外一个函数内部,使用到了另外一个函数中的变量,此时如果函数没有调用,另外一个函数的内部变量就无法销毁,直到内部函数调用完成,才能销毁,此时内部函数和外部函数中的变量组成一个闭包
闭包的作用:延长外部函数的某个变量的生命周期
7、 scala函数的柯里化
本质上可以理解为函数闭包的一个特例,将原本需要传递多个参数的函数,转为多个需要传递一个参数的函数,多个函数之间有变量依赖关系