callback(回调函数)

article/2025/9/17 12:09:44

先讲点题外话。

编程分为两类:系统编程(system programming)和应用编程(application programming)。所谓系统编程,简单来说,就是编写;而应用编程就是利用写好的各种库来编写具某种功用的程序,也就是应用。系统程序员会给自己写的库留下一些接口,即API(application programming interface,应用编程接口),以供应用程序员使用。所以在抽象层的图示里,库位于应用的底下。

当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。

 

上图来源于维基百科。

可以看到,回调函数通常和应用处于同一抽象层(因为传入什么样的回调函数是在应用级别决定的)。而回调就成了一个高层调用底层,底层再过头来用高层的过程。这应该是回调最早的应用之处,也是其得名如此的原因。 

回调机制的优势

从上面的例子可以看出,回调机制提供了非常大的灵活性。请注意,从现在开始,我们把图中的库函数改称为中间函数了,这是因为回调并不仅仅用在应用和库之间。任何时候,只要想获得类似于上面情况的灵活性,都可以利用回调。

这种灵活性是怎么实现的呢?乍看起来,回调似乎只是函数间的调用,但仔细一琢磨,可以发现两者之间的一个关键的不同:在回调中,我们利用某种方式,把回调函数像参数一样传入中间函数。可以这么理解,在传入一个回调函数之前,中间函数是不完整的。换句话说,程序可以在运行时,通过登记不同的回调函数,来决定、改变中间函数的行为。

中间函数和回调函数是回调的两个必要部分,不过人们往往忽略了回调里的第三位要角,就是中间函数的调用者。绝大多数情况下,这个调用者可以和程序的主函数等同起来,但为了表示区别,我这里把它称为起始函数。

之所以特意强调这个第三方,是因为我在网上读相关文章时得到一种印象,很多人把它简单地理解为两个个体之间的来回调用。譬如,很多中文网页在解释“回调”(callback)时,都会提到这么一句话:“If you call me, I will call you back.”我没有查到这句英文的出处。我个人揣测,很多人把起始函数和回调函数看作为一体,大概有两个原因:第一,可能是“回调”这一名字的误导;第二,给中间函数传入什么样的回调函数,是在起始函数里决定的。实际上,回调并不是“你我”两方的互动,而是ABC的三方联动。有了这个清楚的概念,在自己的代码里实现回调时才不容易混淆出错。

另外,回调实际上有两种:阻塞式回调和延迟式回调。两者的区别在于:阻塞式回调里,回调函数的调用一定发生在起始函数返回之前;而延迟式回调里,回调函数的调用有可能是在起始函数返回之后。这里不打算对这两个概率做更深入的讨论,之所以把它们提出来,也是为了说明强调起始函数的重要性。网上的很多文章,提到这两个概念时,只是笼统地说阻塞式回调发生在主调函数返回之前,却没有明确这个主调函数到底是起始函数还是中间函数,不免让人糊涂,所以这里特意说明一下。

原文地址:https://www.zhihu.com/question/19801131


http://chatgpt.dhexx.cn/article/r6wMBuG7.shtml

相关文章

Callback回调函数介绍(C语言)

目录 1. 回调函数的定义 2. 为什么要用回调函数 3. 怎么用回调函数 3.1 怎么使用没有参数的回调函数 3.2 怎么使用带参数的回调函数 1. 回调函数的定义 最近在工作中经常用到回调函数callback,总结一下。 先来看看维基百科对callback的解释:In co…

Callback函数详解

http://shiwawa.blog.hexun.com/9925417_d.html 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢…

《软件质量保证与测试》学习笔记【第一章 软件测试基本概念】

目录 前言为什么要进行软件测试什么是软件缺陷1.1 什么是软件测试1.2 软件测试与CMMI软件质量保证SQA与软件测试的关系 1.3测试用例1.3.1什么是测试用例测试用例的五大要素测试用例1.3.2测试用例的评价标准1.3.3测试用例设计的基本原则1.3.4测试用例模板 1.4测试环境1.4.1什么是…

群晖NAS教程(十)、利用Docker安装蚂蚁笔记(leanote)

为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客 群晖NAS教程(十)、利用Docker安装蚂蚁笔记(leanote) 蚂蚁笔记是一款特别棒的笔记软件,支持Markdown语法,是程序员必备的软件之一。下面我们就在群晖DS918+的机器上docker出来一个耍耍。 一、下载蚂蚁笔记(leanote)镜…

基于 Qt 框架的开源笔记软件 VNote

关注、星标公众号,直达精彩内容 来源:OSC开源社区 作者:tamlok VNote是一个受Vim启发开发的专门为Markdown而优化、设计的笔记软件。 授权协议:MIT 开发语言:C/C JavaScript HTML/CSS SHELL 操作系统:跨平台…

VisionPro软件笔记

VisionPro笔记 1、CogPMAlignTool的操作方法: 抓取图像-设置训练区域及参数-训练模板-设置运行参数与区域-运行-查看结果 2、CogPMAlignTool的基本原理: 图案位置搜索工具(识别定位)基于边缘特征的模板而不是基于像素的模板匹配…

一款开源的支持离线的支持MarkDown的优秀笔记软件----思源笔记

日常工作中,大家可能会用笔记软件记录自己积累的一些知识,组建自己的知识管理系统,常用的工具可能有云笔记,如有道云笔记,印象笔记等,但是有时候在工作中,信息比较敏感,不能够将信息…

一文了解常用效率记笔记软件(超过20款含有图片和双向链笔记)

前言 Mac 软件推荐下载网址 麦软网:https://www.macfz.com腾讯柠檬:https://lemon.qq.com/lab 更新时间 第七次更新 6 月 28 号 ,对于有道和印象的理解,有时间把这篇文章拆分下第六次更新 5 月 27 号,更新了如何看待…

知识管理软件,有道云笔记的优缺点和C笔记

前言 软件有道云笔记C笔记发布时间2011年6月28日还在内测所属公司网易公司北京创新乐知网络技术有限公司 1.笔记的重要性: 大家有没有一种种感受,我们成日钻研书籍,天天认真听讲,发奋学习,收到的反馈却并不理想&…

OneNote-做笔记的软件-强烈推荐

一、认识电子笔记本 普通笔记本转化为电子笔记本 笔记可以将我们的想法和从外部获取的信息进行归纳和整理,而电子笔记本就是将传统的笔记进行了电子化电子笔记本的优势 可搜索统一管理高效编辑可修改性多端同步主流电子笔记本 OneNoteEver note(印象笔记)Notability…

推荐几款好用的云笔记软件

一直钟爱印象笔记,程序员的电脑上必装的软件,但最近期限到了,再也不能像以前无限制的上传文件,续费也比去年的只要九块九一年高出了很多倍,因此,注册试用了其他的笔记,发现云笔记众多&#xff0…

php个人笔记系统 开源,Github精选!一款开源免费的轻量级笔记软件

更多精彩内容,请关注公众号【平凡而诗意】 ​ 笔记软件是工作和学习过程中经常会用到的软件,会议纪要、工作事项、待办,都需要用到笔记软件,这样能够明确做事的先后顺序,能够提高做事的效率。 笔记软件数不胜数&#x…

软件工程复习笔记 类图

类图 前言1 类图的概念1、类图2、类图的作用3、类图的组成元素 2 UML中的类(1)类的定义(2)类的表示(3)类的命名(4)类的属性&#xff0…

想找一款读书笔记软件?快来试试BookxNote

去年看到网上介绍 BookxNote 是一款做读书笔记的好工具,被誉为“ Windows 端的 MarginNote” 。当时试用了一下感觉挺好,但是在笔记和书籍的存储上还有一些困惑,因此有点顾虑。最近看教程和自己尝试,解决了困惑,在此分…

做笔记软件

做笔记软件 找最好的笔记软件:三强篇(EverNote、Mybase、Surfulater) [转载请保留] 版本1.0 编译xbeta/善用佳软 出自 http://blog.sina.com.cn/u/46dac66f01000b57 寻找最好的笔记软件:三强篇(EverNote、Mybase、Surfulater) v1.0 作者: SuperboyAC 编译: xbe…

【笔记软件obsidian】从入门到精通

目录 一.前言 二.下载及安装,基本使用方法 三.完成第一篇笔记(重点) 四.【选修】ios用户如何通过iCloud进行三平台同步 五.基本Markdown语法(一定要看完!) 六.结语 一、前言: 最近被很多同学问到&#xff…

计算机记笔记软件是什么,电脑记笔记软件哪个好(适合学生做笔记的软件)

瞬息万变的世界,软件的更迭也风起云涌。各色各样的软件层出不穷让人眼花缭乱,一次又一次的更新让人应接不暇,还没弄清一个软件的用法又被另一个软件吸引了目光。这种现象无论是在 软件介绍 1. XMind XMind 是一款思维导图软件,他支…

几个离线笔记软件推荐

eDiary 官网:http://www.haoxg.net/ eDiary的作用不仅仅在于写日记,您也可以用它来记流水帐、写工作日志, 记录学习心得,或者用它来管理你的日常文档。eDiary以时间为主线,以文 字为载体,记录你的心路历程…

Notion 程序猿必备笔记软件

我发现工作时间比较久的人,都会逐渐养成记笔记的习惯,我也是,我之前已经使用国内某云笔记8年之久,而且是多年的会员。但我今天要给大家推荐另一款笔记软件——Notion,国内可能Notion的使用还比较少,但它却在…

笔记软件对比

之前一直用的印象笔记和有道云笔记,14年大学毕业的时候用的有道云笔记。积累了很多了。工作后用了印象笔记。mac下面的暗黑模式用得很舒服,奈何windows下界面丑得不要不要的。还不能更换纸张背景。一大片白。 上个月换了工作了,用的公司发的…