kotlin中的函数
今天看了kotlin高阶函数和lambda表达式,以及匿名函数。最初的高阶函数看的云里雾里。看了扔物线大佬的视频,有了一些理解,特此记录一下。
首先,kotlin中的函数使用fun定义,定义函数的时候声明函数的参数,以及返回值。
//doSomeThing是函数名 //括号中的是函数的参数,包含参数名和参数变量 //:Int表示返回值是Int类型 fun doSomeThing(x:Int,y:Int):Int{ return x*y }
以上是一个简单的包含参数以及返回值的函数声明,函数的使用也是比较简单,直接使用someThing(2,3)就可以使用当前函数。如果一个函数不需要返回值,在函数声明的时候可以指定返回值类型为Unit,或者直接省略。
关于函数的参数
1、默认参数 声明函数时可以指定某参数的默认值,调用的时候如果没有当前参数,就使用默认值。这个函数被覆盖时,不能包含默认值。
2、具名参数 调用函数时,指定参数名称
3、不定参数 声明有可变参数的函数时,需要使用vararg关键字,表示这是一个可变参数。可变参数的实质是一个数组。
这里加上一个闭包的概念:外部作用域中声明的变量。
下面开始记录高阶函数。
先说以下函数的类型。kotlin中的函数具有类型。例如(Int)->Int.括号中的Int表示参数类型,最后一个Int表示返回值。返回值为空Unit也不能省略。
文档上有一个函数类型可以有一个额外的接受者类型。这里的概念不好理解,直接来一个例子。
var sub:Int.(Int)->Int={ println("this $this it $it") this-it } println(4.sub(2)) this 4 it 2 //这里是打印的数据 2 //这里是最后的结果
通过这段代码可以更好的理解以下。
另外挂起函数需要有一个suspend关键字。
高阶函数也是一个函数,没有特殊的功能,与普通函数的区别就是参数或者返回值类型。高阶函数的参数或者返回值是函数类型的。
也就是高阶函数在使用的过程中,需要传递一个函数的对象。可以是匿名函数或者lambda表达式挥着是函数对象的引用。
使用::可以得到一个函数对象的引用,这个引用可以直接调用,其功能和函数一致。invoke
lambda表达式
val sum:(Int,Int)->Int={x:Int,y:Int->x+y} 这是完整的语法形式。函数类型是可选的,{}中包含完整语法形式的参数声明,函数体在->之后,最后一个表达式的值,会被推断为返回值。
如果高阶函数的最后一个参数类型是函数类型,lambda可以写在()之外。
如果高阶函数只有一个函数类型的参数,()可以省略
如果lambda只有一个参数,这个参数也可以省略,会有一个默认的it,它就是默认的参数名
匿名函数
匿名函数是一个没有函数名的常规函数。
再次强调,闭包是外部作用域定义的变量。