Kotlin语言(四):函数

2022-01-13  本文已影响0人  SupKing_a520

1、输入输出函数

fun main() {
    /**-------------------- 输出函数println() --------------------*/
    println("欢迎来到kotlin世界!")

    /**-------------------- 输入函数readLine() --------------------*/
    print("请输入第一个参数:")
    val a = readLine()?.toInt() ?: -1
    print("请输入第二个参数:")
    val b = readLine()?.toInt() ?: -1
    println("$a + $b = ${a + b}")
}

2、四种函数模型

/**
 * 1、无参无返回值函数(其返回值是Unit,可以不写)
 */
fun sayHello(): Unit {
    println("hello")
}

/**
 * 2、有参无返回值函数(其返回值是Unit,可以不写)
 */
fun sayHello(name: String) {
    println("Hello $name")
}

/**
 * 3、有参有返回值函数
 */
fun getHello(name: String): String {
    return "Hello $name"
}

/**
 * 4、无参有返回值函数
 */
fun getHello(): String {
    return "hello"
}

fun main() {
    sayHello()
    sayHello("Kotlin")
    println(getHello())
    println(getHello("Kotlin"))
}

3、顶层函数

//main函数也是顶层函数
fun main() {

}

//haha也是顶层函数
fun haha() {

}

4、嵌套函数

fun main() {
    //sayHello即为嵌套函数
    fun sayHello() {
        println("hello")
    }
    sayHello()
}

5、函数表达式

fun add(a: Int, b: Int): Int {
    return a + b
}

/**
 * 函数表达式:函数体只有一条语句的函数就是函数表达式
 *
 * (1)去掉{}和return,用=连接
 * (2)去掉返回类型
 */
fun add1(a: Int, b: Int) = a + b
fun sayHi() = println("Hi kotlin !")
fun max(a: Int, b: Int) = if (a > b) a else b

fun main() {
    println(add(1, 2))
    println(add1(10, 20))
    sayHi()
    println(max(5, 6))
}

6、函数引用

fun sub(a: Int, b: Int): Int {
    return if (a > b) a - b else b - a
}

fun main() {
    /**-------------------- ::函数名 --------------------*/
    //::sub:获取sub函数的引用,类似于c语言里的函数指针
    val pSub = ::sub

    /**-------------------- 使用 --------------------*/
    //(1)直接调用
    println(pSub(3, 5))
    //(2)通过invoke调用,这种方式的好处是可以使用空安全调用符 ?.
    println(pSub?.invoke(5, 3))

}

7、匿名函数

fun main() {
    /**
     * 匿名函数(Int, Int) -> Int:代表具有两个Int参数和返回值为Int类型的函数
     */
    val pFun: (Int, Int) -> Int = { a, b -> a + b }
    println(pFun(1, 2))
}

8、函数的默认参数

/**
 * 函数的默认参数
 * 1.method的默认值为GET
 * 2.如果调用的时候只传path,则会使用method默认值GET
 * 3.调用时仍然可以传递method来替换默认值
 *
 * 注:此处可以对比java里面的重载函数来理解,可以避免写很多重载函数。
 */
fun sendRequest(path: String, method: String = "GET") {
    println("path=$path method=$method")
}

fun main() {
    sendRequest("http://www.baidu.com")
    //此处使用默认的GET请求方式,结果为:path=http://www.baidu.com method=GET
    sendRequest("http://www.baidu.com", "POST")
    //此处使用指定的POST请求方式,结果为:path=http://www.baidu.com method=POST
}

9、函数具名参数

/**
 * 函数具名参数
 * 1.具名参数是指在调用时显示指定参数名字
 * 2.使用具名参数时可以不用管参数的顺序
 */
fun enqueueRequest(path: String, method: String = "GET", header: String = "UTF-8") {
    println("path=$path method=$method header=$header")
}

fun main() {
    enqueueRequest("http://www.baidu.com")
    //结果:path=http://www.baidu.com method=GET header=UTF-8

    /**-------------------- 使用具名参数调用函数 --------------------*/
    enqueueRequest(path = "http://www.baidu.com")
    //结果:path=http://www.baidu.com method=GET header=UTF-8
    enqueueRequest(path = "http://www.baidu.com", method = "POST")
    //结果:path=http://www.baidu.com method=POST header=UTF-8
    enqueueRequest(header = "GBK", method = "POST", path = "http://www.baidu.com")
    //结果:path=http://www.baidu.com method=POST header=GBK
}

10、函数可变参数

/**
 * 1.vararg关键字修饰参数即为可变参数
 * 2.其参数类型变成对应的数组类型
 *
 * 注:对比于java里面的:int... x
 * 求n个Int数据的和
 */
fun add(vararg x: Int): Int {
    //这里的x的数据类型为IntArray
    var result = 0
    x.forEach {
        result += it
    }
    return result
}


fun main() {
    val result = add(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
    println("result=$result")
    //result=45
}
上一篇下一篇

猜你喜欢

热点阅读