kotlin: 函数类型作为参数和返回值

一,代码:

        binding.button1.setOnClickListener {

            //定义一个函数类型的变量,用来返回参数的平方
            val square: (Int) -> Int = { it * it }  // `it` 代表传入的参数
            println("square(5)的结果:"+square(5)) // 输出 25

            //函数类型 作为operate函数的参数
            fun operate(a: Int, b: Int, op: (Int, Int) -> Int): Int {
                return op(a, b)
            }

            //调用
            val result1 = operate(3, 4, { x, y -> x * y })
            println("operate(3, 4) { x, y -> x * y } 的结果:"+result1) // 输出 12

            //调用,当 Kotlin Lambda 作为函数的最后一个参数时,Lambda 可以被挪到外面
            val result2 = operate(3, 4) { x, y -> x * y }
            println("operate(3, 4) { x, y -> x * y } 的结果:"+result2) // 输出 12

            //调用,一个命名函数
            fun multiply(x: Int, y: Int) : Int {
                return x * y
            }
            val result3 = operate(3, 4, ::multiply)
            println("operate(3, 4, ::multiply) 的结果:"+result3) // 输出 12

            //调用,一个匿名函数
            val multi = fun(x: Int, y: Int) = x * y
            val result4 = operate(3, 4, multi)
            println("operate(3, 4, multi) 的结果:"+result4) // 输出 12
                
            //Lambda 作为函数返回值
            fun getOperator(): (Int, Int) -> Int {
                return { x, y -> x + y }
            }

            //add这个变量的类型:  (Int, Int) -> Int
            val add = getOperator()
            println("add(10, 5) 的结果:"+add(10, 5)) // 输出 15

            //只有一个函数类型作为函数参数
            fun highOrderFunction(operation: (Int, Int) -> Int): Int {
                return operation(10, 20)
            }

            //当 Kotlin 只有一个 Lambda 作为函数参数时,() 可以被省略
            val result = highOrderFunction { a, b -> a + b }
            println("highOrderFunction { a, b -> a + b } 的结果:"+result) // 输出 30

            //Kotlin 允许在 只有一个参数 的 Lambda 表达式中,使用 it 作为默认参数名称,省略显式声明。
            val square1: (Int) -> Int = { it * it }   //省略参数
            val square2: (Int) -> Int = { x -> x * x }  //不省略参数

            val res1 = square1(5)
            val res2 = square2(5)
            println("square1(5) 的结果:"+res1) // 输出 25
            println("square2(5) 的结果:"+res2) // 输出 25

            //两个及以上参数时,必须显式声明
            // 两个参数,必须显式声明
            val add2: (Int, Int) -> Int = { a, b -> a + b }
            println("add2(3, 4)的结果:"+add2(3, 4)) // 输出 7

        }

二,运行结果:

posted @ 2025-07-19 07:46  刘宏缔的架构森林  阅读(38)  评论(0)    收藏  举报