回调函数callback的作用

回调函数callback的作用

查阅了网上的一些内容,自己总结了一下,算是比较全面了。

定义:一个函数指针作为另一个函数A()的参数被调用时,它是回调函数。

A(int m, int n, bool * f(m,n))

  1. 既然是函数的参数,就具备了扩展性和代码重用的作用,因为形参不变,实参是可变的。所以调用时,可以A(x,y,B),也可以A(x,y,C),这里B和C都是回调函数,有点像虚函数。(B和C可以实现不同的功能,或以不同的方式实现)

----场景:代码重用。A(x, y, isGreater), A(x, y , isSmaller)

  1. 在定义A()时,甚至不需要知道实际的被调函数的名字,只要知道这个接口的格式,即参数,返回值,实现功能。所以甚至在确定被调函数如何实现之前,只要约定好接口和功能,就可以进行A()的定义工作。(实现相同的功能)

----场景:框架编程,并行工作。业务流程步骤编排(不管具体实现)。

A(bool * f())

  1. 甚至被调函数f()到底实现什么功能,也是可以不定义的。只是在A里面规定好条件触发,将具体做什么的决定权交给用户。

----场景:事件,通知。

我猜OnTimer()应当就是一个回调函数,开放给用户自定义动作。整个定时器的机制已经是预定义好的。

main函数其实也是。都是事件机制。

  1. 结合多线程异步使用。

----场景:工作继续进行,主函数先结束。

void A(url, call)
{
开启url线程,传入call
函数本身返回.
}

5.结合延迟函数。

void A(call)
{
setTimeout(call, 10000)
函数本身返回.
}

其实叫回调函数总让人有些难以理解,直接叫被调函数就得了。

callback很多人都会举的一个例子是回家后打电话,这个例子其实并不清晰,如何将这个例子的元素对应到函数上面?我觉得不必深究,认识到callback本身隐含了延迟,触发,自定义的意义即可,对应了上面3,4,5的作用,可能这也是应用最广的场合了。

引用这个文章的一句话(https://www.cnblogs.com/moxiaowohuwei/p/8438236.html):

所以回调与同步、异步并没有直接的联系,回调只是一种实现方式,既可以有同步回调,也可以有异步回调,还可以有事件处理回调和延迟函数回调,这些在我们工作中有很多的使用场景。所以其实并不是我们不认识回调函数,而是我们都萦绕在了这个“callback“ 这个词上,当你在一个函数中看到它是就会困惑,其实它只是一个形参名字而已

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值