Learning Kotlin: Lambda 表达式

方法声明:

  • 普通类的方法
  • 静态类的方法
  • companion object 伴生类的方法
1
2
3
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}

普通类的方法

1
2
3
4
5
6
7
class Person {
fun test(){
println("成员方法")
}
}

>>> Person().test()

静态类的方法

1
2
3
4
5
6
7
object Util {
fun test() {
println("工具类方法")
}
}

>>> Util.test()

companion object 伴生类的方法

1
2
3
4
5
6
7
8
9
class Person {
companion object {
fun test(){
println("companion function")
}
}
}

>>> Person.test()

方法参数

  • 默认参数
  • 具名参数
  • 可变数量的参数

默认参数

方法参数可以有默认值,当省略相应的参数时使用默认值。

1
fun read(offset: Int = 0, start: Int) {}

具名参数

如果一个默认参数在一个无默认值的参数之前,那么无默认值的参数,通过具名参数赋值

1
2
3
 fun read(offset: Int = 0, start: Int) {}

read(start = 1)

如果最后一个参数是方法,那么它既可以作为具名参数在括号内传入,也可以在括号外传入。

1
2
3
4
5
fun read(offset: Int = 0, start: Int, action:() -> Unit){} // action 为方法参数
read(start = 1, action = { println("hello") })
read(start = 1) {
println("hello")
}

可变数量的参数(Varargs)

1
2
3
4
5
6
7
8
9
10
fun append(vararf str: Str): String {
val result = StringBuffer()
for (char in str){
result.append(char)
}

return result.toString()
}

>>> appednd('1', '2', '3')
1
2
val world = charArrayOf('w', 'o', 'r', 'l', 'd')
val result = append('h', 'e', 'l', 'l', 'o', *world)

可变参数的要求:

  • 只有一个参数可以标注为 vararg;
  • 如果 vararg 不是最后一个参数,可以使用具名参数语法,给后面的参数传递值。

Lambda 表达式

隐形参数 it:

  • it 并不是 Kotlin 中的一个关键字(保留字)
  • it 是在当一个高阶方法中 Lambda 表达式的参数只有一个的时候可以使用 it 来使用此参数
  • it 可表示为单个参数的隐式名称,是 Kotlin 语言约定的