【2025最新版Kotlin教程】Kotlin第一行代码系列第二课-函数和高阶函数

299 阅读2分钟
【2025最新版Kotlin教程】Kotlin第一行代码系列第二课-函数和高阶函数

为什么要有函数,你可以想象我们写一个程序就好像工人建一个房子一样。工人身上的手和脚就相当是定义变量,工人会搬动砖头就相当函数,再给一些工具(程序也有工具类)就可以建房子了

函数就是方法,方法就是函数

  • 变量的定义使用场景很明确,那什么时候定义函数呢
  • 经验总结:行为,计算(也是一种行为),复用次数多
一、函数的定义
// 源码联系:893151960
fun main() {

    //====================================函数的定义start==================
    /**
     * val var 变量
     * fun是关键字,show是函数的名字,它是无参的所以(),{}内是方法体,就是方法里面要做什么功能或者说处理
     *
     * 声明:函数就是方法,方法就是函数。它们代表的是同一样的东西,没有任何区别,叫法不一样而已
     */
    // 方式1:无参,无返回
    // show()和show2()等价
    fun show(){
        println("我会跳舞")
    }
    fun show2():Unit{
        println("我会跳舞")
    }

    // 方法2:有参,无返回
    fun show(name:String){
        println("${name}会跳舞")
    }

    // 方法3:有两个参数,你也可以继续加参数。无返回
    fun show(name:String,age:Int){
        println("${name}年龄${age}会跳舞")
    }

    // 方法4:带默认参数,调用时可不传sex参数
    /**
     * 经验总结,方法超过3个参数,建议竖着定义方法参数,调用也一样
     */
    fun show4(
        name: String,
        age: Int,
        sex: Int = 1
    ) {
        println("${name}年龄${age}会跳舞")
    }
    show4(
        "小白兔",
        15)

    // 方法5:带返回值的函数
    /**
     * 经验总结:看起来是不是像变量的定义 var showBack:String
     * 有这个思想很好的,再学参数是方法就简单了
     */
    fun showBack():String{
        return "你好"
    }

    // 方法6:参数不允许为null
    fun noneNullTest(s : String){
        println(s)
    }

    // 方法7:参数允许为null
    fun canNullTest(s:String?){
        println(s)

        //s为null,停止执行
        s?.capitalize()
        //s为null,抛异常
        s!!.capitalize()
    }

    /**
     * 选学内容:高阶函数
     * 方法中参数是方法或者返回是方法就叫做高阶函数
     * 它的使用场景:不用再声明各种接口回调了,直接用参数方法即可
     */
    // 方法变量
    var show:() ->String
    show = ::showBack

    val show2:(String)->Unit
    show2 = ::show

    // Lambda 就是函数的缩写
    val me = { str:String ->
        "233"
    }
    // 方法8:参数是一个参数为字符串,返回值是字符串的方法
    // 是不是有点懵,其实它超级有用
    fun showFun(method:(String) ->String):String{
        val name = "小象"
       return  method(name)
    }
    showFun(me)


    // 我们来看下showFun方法怎么调用
    //  (String) -> String
    fun showBack2(name:String):String{
        return "你好${name}"
    }


    val show3:(String) ->String
    show3 = ::showBack2

    // 第一:调showFun
    println(showFun(show3))
    // 第二:也可以直接用::showBack2
    println(showFun(::showBack2))
    // 第三:如果用Lambda,会更简单,你要记住Lambda就是函数的简写,它也是个函数
    showFun {
        "你好"  //最后一行就是返回了
    }

    // 还有带接收者的高阶函数
    fun showFunA(str:String.(Int) ->Unit){
        "666".str(233)
    }
    // 调用
    showFunA { index ->
        println("这里是String的域,可以直接写String的方法,位置是${index}")
    }


    //====================================函数的定义end==================

}
二、参数是函数
fun main() {

    //定义一个匿名函数
    val showDiscount = { name:String,age:Int->
        "方式一:${name}的年龄是${age}岁"
    }

    showOnBoard("小明",showDiscount)

    //方式二:简略写法,直接在参数中定义,
    //条件:1.是参数的最后一个参数;2.是唯一一个参数,两者满足其一即可使用该简略写法
    showOnBoard("小明") { name: String, age: Int ->
        "方式二:${name}的年龄是${age}岁"
    }

    //方式三:非最后一个参数写法
    showOnBoard2({name:String,age:Int ->
        "方式三:${name}的年龄是${age}岁"
    },"小明")

    //方式四:采用函数引用
    showOnBoard("小明",::showMyFull)

}

private fun showMyFull(name: String,age:Int) = "方式四:${name}的年龄是${age}岁"

/**
 * 参数为函数类型,作为最后一个参数
 */
private fun showOnBoard(name:String,showDiscount:(String,Int)->String){
    val age = (10 .. 30).shuffled().first()
    println(showDiscount(name,age))
}

/**
 * 参数为函数类型,该非最后一个参数
 */
private fun showOnBoard2(showFullInfo:(String,Int)->String,name: String){
    val age = (10 .. 30).shuffled().first()
    println(showFullInfo(name,age))
}
三、返回值是函数
/**
 *
 * 返回值是函数类型
 */
fun main() {
    val f = showOnBoard("小明")
    println(f())

    //nimingShowMethod 是 showMethod函数的返回值,这个返回值是一个函数
    val nimingShowMethod = showMethod("Kotlin语言")
    //nimingShowMethod是匿名函数
    println(nimingShowMethod("yuknight", 25))

}


/**
 * 参数为函数类型,作为最后一个参数
 */
private fun showOnBoard(name: String):()->String{
    return {
        val age = (10 .. 30).shuffled().first()
        "返回值是函数类型:${name}的年龄是${age}岁"
    }
}

//showMethod函数              返回一个匿名函数
fun showMethod(info:String):(String, Int)->String{
    println("我是showMethod函数 info:$info")
    //返回一个匿名函数
    return { name:String, age:Int ->
        "我就是匿名函数:我的name:$name,age:$age"
    }
}

有兴趣的也可以看对应的视频教程:

[video(video-F3W9oJrq-1729561974143)(type-bilibili)(url-player.bilibili.com/player.html…)]

kotlin整个教程项目源码结构图:

在这里插入图片描述
有Android开发,鸿蒙开发需求问题或者完整源码的可以看简介联系我,也可以私信我,我每天都看私信的