kotlin : 高阶函数概览

按照定义,高阶函数就是以另一个函数作为参数或者返回值的函数。在Kotiin中, 函数可以用lambda或者函数引用来表示。

因此,任何以 lambda 或者函数引用作为参数的函数,或者返回值为 lambda 或函数 引用的函数,或者两者都满足的函数都是高阶函数 。

来看一段代码:

fun main() {


    val added = compute(2, 3) { a, b -> a + b }
    val multi = compute(2, 3) { a, b -> a * b }

    println("added=$added, multi=$multi")
}

fun compute(x: Int, y: Int, operation: (Int, Int) -> Int) 
	= operation(x, y)

看输出:

added=5, multi=6

这段代码逻辑非常简单,但是表现的是一个偏函数的定义与使用。

如果是 python ,也能很容易做到上面的类似逻辑。但是如果是 Java , 几乎无法实现相同的逻辑。

这段代码展示的内容很酷。比如上面的compute函数,接收3个参数,前两个是数据,第三个是函数。compute本身不做任何的逻辑,只是将数据传给 第三个参数,让这个函数去做实际的逻辑处理。

而这个 lambda 也没有去做任何的逻辑处理,只是定义的参数类型和返回值类型。然后被调用者处理。

所以调用者可以根据实际需要进行实际逻辑的处理。

比如上面的:

    val added = compute(2, 3) { a, b -> a + b }
    val multi = compute(2, 3) { a, b -> a * b }

这种方式完全可以取代传统Java 中的很多回调定义与实现。


如果是 Java 来实现,可以是这样的操作:

public class Main {
    public static void main(String[] args) {

        compute(2, 3, new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer invoke(Integer x, Integer y) {
                return x + y;
            }
        });
        compute(2, 3, new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer invoke(Integer x, Integer y) {
                return x * y;
            }
        });
    }


    public static int compute(int a, int b, Function2<Integer, Integer, Integer> func) {
        return func.invoke(a, b);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值