文章

Kotlin基础——函数

开始

kotlin函数使用fun关键字声明,参数必须有类型声明

1
2
3
fun function(arg: Int): Int {
    return arg * 2
}

函数作用域:顶层函数、成员函数、局部函数

kotlin支持顶层函数和顶层属性,也支持局部函数

默认参数和具名参数

函数参数可以使用默认参数,使用函数时可以使用具名参数指定参数值

1
2
3
4
5
6
7
fun add(a: Int, b: Int = 10): Int {
    return a + b
}
add(5, 10) // 正常调用
add(5) // 使用b默认值
add(a = 5, b = 10) // 具名参数调用
add(a = 5) // 具名参数调用,使用b默认值

当默认值参数在无默认值参数之前,无默认值参数只能通过具名参数调用

1
2
3
4
fun add(a: Int, b: Int = 10, c: Int): Int {
    return a + b + c
}
add(10, 5, c = 20) // 默认值参数和它之前的参数可以按顺序传值,默认值之后的参数必须具名参数传值

Unit

Unit类似于void,表示不需要返回值,若不指定返回值类型,默认为Unit

1
2
3
4
5
6
fun method(): Unit {
    // ...
}
fun method() { // 返回Unit
    // ...
}

单表达式函数

当一个函数中只有一个表达式时,可以简化语法

1
2
3
4
fun add(a: Int, b: Int): Int = a + b
// 当返回值类型可从表达式中推断时,可省略返回值类型
fun add(a: Int, b: Int) = a + b
// 函数代码块不支持返回值类型推断

可变参数

可变参数使用vararg关键字修饰,作为参数数组使用

1
2
3
4
fun method(a: Int, vararg b: Int, c: Int) {
    // statement
}
method(2, 3,4,5,6, c = 10) // 可变参数和它之前的参数按顺序传值,可变参数之后的参数必须具名参数传值

中缀表示法

使用infix关键字声明的函数可以使用中缀表达式形式,即a op b,等价于a.op(b)

  • 函数必须是成员方法或扩展函数
  • 函数必须只有一个参数
  • 函数参数不能是可变参数,不能有默认值
  • 当在类中需要使用当前类作为接收者时,接收者为this
1
2
3
4
5
6
7
8
9
10
class Person {
    infix fun say(content: String) {
        println(content)
    }
}
fun main() {
    val person = Person()
    // person称为接收者,"Hello"为参数
    person say "Hello"
}
本文由作者按照 CC BY 4.0 进行授权