什么是回调函数

需求

A,B两个小组开发一个功能。B小组开发制作油条模块:make_youtiao。A小组需要调用B小组开发的模块,然后执行后续的操作:sell()如下图:

请添加图片描述

上面的方式A小组必须等待B小组开发的模块make_youtiao执行完成后才能执行sell()。

上图代码的写法:

make_youtiao(10000);
sell();

在这里插入图片描述

存在的问题:A小组不知道啥时候B小组执行完,因此必须等待B小组执行完,再执行后续的操作sell(),效率不够高。

要是A能够告诉B小组,你执行完make_youtiao后自动执行sell()就好了!我把任务交给你之后就去做其他事情啦~

在这里插入图片描述

看懂了?回调函数就是上面的sell()函数,不过他要作为参数传递给B小组。

上面功能用回调函数实现

B小组开发的模块这样定义:

void make_youtiao(int num, func call_back) {
    // 制作油条
    do_youtiao();
    call_back(); //执行回调 
}

A小组这样调用,将make_youtiao完成后和make_youtiao相关的工作sell作为参数传入:

make_youtiao(10000, sell);

新的编程思维模式

同步的思维方式:

res = request();
handle(res);

这种是必须等待执行完,拿到结果res,我们才能处理下一步和结果相关的工作handle()。

在这里插入图片描述

异步的思维方式:

request(handle);

这种方式不关心request何时执行完,将后续的工作handle传入request,当request执行完了,自动就把handle处理了。

3e2ceb4b054ae956c7422547a76ff660_720w.webp&pos_id=img-wrrhxyoc-1702705329186)

举个例子说明同步和异步的区别:

同步:老板凡事亲力亲为,自己亲自拨电话等待电话接通(request)。然后吩咐事情(handle)。

异步:老板直接告诉小秘吩咐的事情是什么,小秘去完成这些琐事。老板就可以腾出手来完成一个亿的小目标啦~

正式定义

在计算机科学中,回调函数是指一段以参数的形式传递给其它代码的可执行代码。可以理解为一种设计思想。

一般函数:我们自己编写的函数在自己内部调用,实现方是我们自己,调用方是我们自己。

回调函数:实现方是我们自己,将函数传给第三方,由三方库来调用。实现方是我们自己,调用方是第三方库。

进一步思考为什么需要callback?

我们之所以要传给第三方库自己定义的函数,是因为第三方库自己的代码执行完成之后,并不知道接下来应该做什么,因此对外提供了一个回调函数(跟对外提供一个接口有点类似,由调用方来具体实现)

最后补充一点是:回调函数被调用的时间点,是需要有特定的事件(event)发生后,才能执行回调函数。比如油条制作完成,文件读取完成,接收到消息。因此回调函数本质上是一个event_handler。

参考链接

https://zhuanlan.zhihu.com/p/326902537

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值