Kotlin函数的形参

作者: 程序员丶星霖 | 来源:发表于2019-07-10 10:10 被阅读9次

一、命名参数

Kotlin函数的参数名不是无意义的,Kotlin允许调用函数时通过名字来传入参数值。

fun main(args: Array<String>) {
    println(girth(3.5, 4.8))
    println(girth(width = 3.5, height = 4.8))
    println(girth(height = 4.8, width = 3.5))
    println(girth(3.5, height = 4.8))
}

fun girth(width: Double, height: Double): Double {
    println("width:${width}")
    println("height:${height}")
    return 2 * (width + height)
}

输出结果:

width:3.5
height:4.8
16.6

width:3.5
height:4.8
16.6

width:3.5
height:4.8
16.6

width:3.5
height:4.8
16.6

如果希望调用函数时混合使用命名参数和位置参数,那么命名参数必须位于位置参数之后。

二、形参默认值

在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值。

fun main(args: Array<String>) {
    sayHi()
    sayHi("关羽")
    sayHi("关羽", "温酒斩华雄")
    sayHi(message = "温酒斩华雄")
}

fun sayHi(name: String = "刘备", message: String = "桃园三结义") {
    println("${name},您好")
    println("咱们${message}")
}

输出结果:

刘备,您好
咱们桃园三结义

关羽,您好
咱们桃园三结义

关羽,您好
咱们温酒斩华雄

刘备,您好
咱们温酒斩华雄
fun main(args: Array<String>) {
    printTriangle(6, '@')
    printTriangle(7, char = '#')
    printTriangle(char = '*')
}

//定义一个打印三角形的函数
fun printTriangle(height: Int = 5, char: Char) {
    for (i in 1..height) {
        //先打印一排空格
        for (j in 0 until height - 1) {
            print(" ")
        }
        //在打印一排特殊字符
        for (j in 0 until 2 * i - 1) {
            print(char)
        }
    }
}

输出结果:

     @
     @@@
     @@@@@
     @@@@@@@
     @@@@@@@@@
     @@@@@@@@@@@
      #
      ###
      #####
      #######
      #########
      ###########
      #############
    *
    ***
    *****
    *******
    *********

如果将带默认值的参数定义在无默认值的参数之前,如果要为默认参数使用默认值时,只能使用命名参数为无默认值的参数传入参数值。

出于对这种情况的考虑,Kotlin建议将带默认值的参数放在函数形参列表的后面

三、尾递归函数

Kotlin支持一种尾递归函数的编程方式,当函数将调用自身作为它执行的最后一行代码,且递归调用后没有更多代码时,可使用尾递归语法。

尾递归不能在异常处理的try、catch、finally块中使用。

尾递归函数需要使用tailrec修饰。

fun main(args: Array<String>) {
    println(fact(10))
    println(factRec(10))
}

//定义计算阶乘的函数
fun fact(n: Int): Int {
    if (n == 1) {
        return 1
    } else {
        return n * fact(n - 1)
    }
}

//使用尾递归函数的语法
tailrec fun factRec(n: Int, total: Int = 1): Int =
    if (n == 1) total else factRec(n - 1, total * n)

输出结果:

3628800
3628800

四、个数可变的形参

Kotlin允许定义个数可变的参数,从而允许为函数指定数量不确定的形参。

在定义函数时,在形参的类型前添加vararg修饰,则表明该形参可以接受多个参数值,多个参数值被当成数组传入。

fun main(args: Array<String>) {
    test(5, "Python", "Java", "Kotlin")
}

//定义形参个数可变的函数
fun test(a: Int, vararg languages: String) {
    for (language in languages) {
        println(language)
    }
    println(a)
}

输出结果:

Python
Java
Kotlin
5

Kotlin允许个数可变的形参可以处于形参列表的任意位置,但是Kotlin要求一个函数最多只能带一个个数可变的形参。

fun main(args: Array<String>) {
    test("Python", "Java", "Kotlin", a = 6)
}

//定义形参个数可变的函数
fun test(vararg languages: String, a: Int) {
    for (i in languages.indices) {
        println(languages[i])
    }
    println(a)
}

输出结果:

Python
Java
Kotlin
6

由于可数可变的形参可以接受个数不等的参数值,所以,如果需要给后面的参数传入参数值,则必须使用命名参数。

如果将数组的多个元素传给个数可变的参数,则可以在传入数组参数前添加*运算符。

fun main(args: Array<String>) {
    var arr = arrayOf("Python", "Java", "Kotlin")
    test(*arr, a = 6)
}

//定义形参个数可变的函数
fun test(vararg languages: String, a: Int) {
    for (i in languages.indices) {
        println(languages[i])
    }
    println(a)
}

输出结果:

Python
Java
Kotlin
6

学海无涯苦作舟

我的微信公众号.jpg

相关文章

  • Kotlin函数的形参

    一、命名参数 Kotlin函数的参数名不是无意义的,Kotlin允许调用函数时通过名字来传入参数值。 输出结果: ...

  • Kotlin泛型函数

    Kotlin提供了对泛型函数的支持。 一、泛型函数的使用 在声明函数时允许定义一个或多个泛型形参,泛型形参要用尖括...

  • swift

    swift 函数 一、函数的定义函数的定义格式 形参列表的格式形参名1: 形参类型1, 形参名2: 形参类型2, ...

  • swift函数基础知识

    1、函数声明和调用 通用函数声明格式:func 函数名称(形参名:形参类型,形参名:形参类型,···)->返回值类...

  • Swift-函数基础

    一、函数 1、定义 1、声明:func 函数名(形参名:形参类型,形参名:形参类型)-> 返回值类型 2、调用:函...

  • JS函数

    一、声明函数 function 函数名 (){函数体} function 函数名 (形参1,形参2...){函数体...

  • ES6 函数中声明报错问题 笔记

    关于ES6中函数形参默认值时,函数形参多次声明相同变量的形参报错的问题: 当函数形参中有 y = 4;相当于let...

  • swift 函数与闭包

    1.函数的定义与使用 2.函数的形参的注意点2.1默认形参是常量,若要在函数中对形参改变,在形参前加上var修饰2...

  • Kotlin高阶函数

    Kotlin的函数也具有自己的类型。函数类型既可以用于定义变量,也可用作函数的形参类型,还可以作为函数的返回值类型...

  • C++函数指针、指针函数、引用函数

    函数指针的声明:返回类型 (*函数名) (形参); 指针函数的声明:返回类型 * 函数名 (形参); 引用函数的声...

网友评论

    本文标题:Kotlin函数的形参

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