美文网首页Kotlin
函数声明及其用法

函数声明及其用法

作者: 码农修行之路 | 来源:发表于2020-11-17 23:19 被阅读0次

函数声明:

例子:声明一个函数

fun double(a: Int): Int {
    return 2 * a
}

传统方法调用函数:

fun main() {
    val result = double(3)
    print(result)
}

调用成员函数:

fun main() {
    val result = double(3)
    print(result)
    // 成员函数使用点表示方法调用
    PersonTwo().printName()
}
fun double(a: Int): Int {
    return 2 * a
}
class PersonTwo() {
    fun printName() {
        print("小黄")
    }
}
  • 注意:成员函数调用通过点表示法

函数参数:

  • 具名参数
  • 默认参数
fun main() {
    // 普通传递参数 需要按照参数顺序传递
    addAc(2, 3)
    // 具名参数 无需按照顺序传递
    addAc(b = 2, a = 6)
    // 默认参数 也就是函数参数可以指定默认值 如果调用函数时该参数不传 那么就会使用默认值
    // 换句话说,默认参数可以不传,可以减少重载的
    addAc(2, 2)// 不传,就取默认参数
    addAc(2, 2, 4)

}

fun addAc(a: Int, b: Int, c: Int = 0): Boolean {
    val value = a + b
    var bo = false
    if (value > 5) {
        println("超过五位童鞋考零分")
        bo = true
    } else {
        println("班级整体成绩还可以")
        bo = false
    }
    return bo
}
  • 注意点:重写一个带有默认参数的函数,必须在重写的函数中省略默认参数值
    例如:
open class ClassA() {
    open fun test(def: Int = 0) {
    }
}

class ClassB : ClassA() {
    //override fun test(def: Int = 3) {}// An overriding function is not allowed to specify default values for its parameters
    // 正确的写法 是去掉重写的默认参数的值
    override fun test(def: Int) {}
}
  • 形参 实参 例如:函数addAc(b = 2, a = 6) 形参就是 a 实参就是 2
  • 默认参数:函数参数可以有默认值,当调用函数省略相应的参数时使用默认值,好处就是,减少重载数量
  • 具名参数:如果有多个参数,使用具名的方式 那么参数的传递可以不用按照顺序传 例如:addAc(b = 2, a = 6)
  • 如果一个默认参数在一个无默认值的参数之前,那么该默认值只能通过使用具名参数调用
    例如:
fun main() {
    // 报错
    //test(3)// None of the following functions can be called with the arguments supplied.
    test(3,4)
    // 或
    test(b = 4)
    // 或
    test(b = 3, a = 4)
}
fun test(a:Int = 4, b:Int) {
}
  • 如果在默认参数之后的最后一个参数是lambda表达式,那么它既可以作为具名参数在括号内传入,也可以再括号外传入
  • 调用Java函数时不能使用具名参数语法,因为Java字节码并不总是保留函数参数的名称

返回Unit的函数:

如果一个函数不返回任何有用的值,它的返回类型是Unit 可以是显示也可以隐式

fun cancel1() {}
fun cancel2():Unit {}

单表达式函数:

如果函数的函数体只有一行代码 就可以使用简洁方式 例如:

fun ackOk1():Int {
    return 2;
}
fun ackOk2():Int = 2
fun ackOk3() = 2
  • 函数返回单个表达式时,可以省略花括号 用 = 号连接
  • 当返回值类型可以由编译器推断时,显示声明返回类型是可选的,也就是返回值类型可以省略
  • 具有块代码体的函数 返回值类型是不可以省略 必须要写的 除非它们旨在返回Unit

可变数量参数

函数的参数通常可以使用vararg修饰符进行标记 通常也是最后一个参数

fun main() {
    scoreT("小黄", 66, 77, 88)
}
fun scoreT(name: String, vararg score: Int) {
    var sum = 0
    score.forEach {
        sum += it
    }
    println("$name 的总成绩:$sum")
}

执行结果:小黄 的总成绩:231

  • 如果可变参数在其它非可变参数的前面 那么其它非可变参数必须使用具名方式调用 参数必须按照顺序传递
    例如:
fun main() {
    scoreV(22, 33, 44, name = "小李子")
}
fun scoreV(vararg score: Int, name: String) {
    var sum = 0
    score.forEach {
        sum += it
    }
    println("$name 的总成绩:$sum")
}

中缀表示法

标有infix关键字的函数 也可以使用中缀表示法(忽略该调用的点与圆括号)
中缀函数必须满足以下几个条件:

  1. 它们必须是成员函数或者扩展函数
  2. 它们必须只有一个参数
  3. 其参数不得接收可变数量的参数且不能有默认值
    例如:
fun main() {
    val result = 1.shl(1)
    val result1 = 1 shl 1
    val result2 = 2 shl 1
    println(result)
    println(result1)
    println(result2)
} 
// 整数值的二倍
infix fun Int.shl(x: Int) = x * 2 // ⽤中缀表⽰法调⽤该函数 1 shl 2 // 等同于这样 1.shl(2)

执行结果:
2
2
4

相关文章

  • 函数声明及其用法

    函数声明: 例子:声明一个函数 传统方法调用函数: 调用成员函数: 注意:成员函数调用通过点表示法 函数参数: 具...

  • (12)Robot Framework的Scalar变量$和Li

    转载 变量的声明、赋值及其使用List Variables-List变量及其用法 一、Scalar变量$的声明 1...

  • Kotlin进阶之函数(Functions)

    函数声明(Function Declarations) 在Kotlin中,函数的声明使用fun关键字: 函数用法(...

  • Kotlin定义函数

    函数函数声明 Kotlin 中的函数使用 fun 关键字声明: 函数用法 调用成员函数使用点表示法:

  • Kotlin-函数

    函数声明 Kotlin 中的函数使用 fun 关键字声明: 函数用法 调用函数使用传统的方法: 默认参数 函数参数...

  • Kotlin 函数

    函数声明 Kotlin 中的函数使用 fun 关键字声明: 函数用法 调用函数使用传统的方法: 调用成员函数使用点...

  • Kotlin函数

    一、函数声明 函数使用 fun 关键字声明: 二、函数用法 1.参数 函数参数使用 Pascal 表示法定义,即 ...

  • Kotlin 学习之函数与 Lambda 表达式

    函数 函数声明 Kotlin 中的函数使用 fun 关键字声明,其code表现形式: 函数用法 调用函数使用传统的...

  • memset函数及其用法

    定义 描述 将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s ...

  • c++11&14-常用属性专题

    1. 常用属性 1.1 auto关键字及其用法 auto关键字可以用于定义变量和函数的返回值(包括声明和定义都可以...

网友评论

    本文标题:函数声明及其用法

    本文链接:https://www.haomeiwen.com/subject/lustiktx.html