时间:2021-05-19
杂谈
还是习惯,写点什么之前,都喜欢来点杂谈。
最近都在搞微信的开发,终于在昨晚进入测试阶段了,好快就测出 bug 来,但也好快修复了。这也让我更担心。
虽说是进入内测阶段,但那代码的结构也真太难看了,还得好好重构一下。迟点得写写关于这微信公众号的开发文章。下次再详谈。
今天开始了三天半的小长假,但我还是坚守在学校。有点不知道为了什么。
刚给 wp 装了个 markdown 插件,爽歪歪!!
在写这篇文章的时候,还是用着 wordpress 的,但在发表的时候,已经换成 hexo 了。原因:没有找到一个完美支持 markdown 的插件,越来越觉得 wp 很臃肿,于是,就拥抱了小萝莉 hexo 了。哈哈。
还有,今天微博看到的一个很赞的神器 GitBook ,分享一下:
Build beautiful programming books and exercises using GitHub/Git and Markdown.
http://www.gitbook.io/
正题,谈回调函数 (Callback)
解释(引用于百度百科):
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所
指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调
用的,用于对该事件或条件进行响应。
机制(引用于百度百科):
⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
意义(个人理解):
调用者和被调用者的关系简单化,互相不用关心对方的逻辑处理,不用关系对方都程序是怎么的,只关系返回值,这种基于返回值
的机制很好地使两者的关系简单,明了。
上代码,以下讲述阿 Ben 去饭堂吃饭的故事
接口 Callback
接口定义事情 Done 了之后应该做些什么
public interface Callback { public void Done(String str);}Ben 类
阿 Ben 饿了,于是要去 have lunch,他叫了 Aunt 帮他煮个饭,调用 Aunt 的 cookMeal 方法,于是 Aunt 就去煮了,至于怎么煮,Ben 就不用管了,只要煮好了,就调用 Done,给饭阿 Ben 吃就可以了。
public class Ben implements Callback { public void havelunch(Aunt aunt){ aunt.cookMeal(this); } @Override public void Done(String str) { System.out.println(str); }}Aunt 类
赋值给 str 就是煮饭的过程,煮好之后,就把结果(饭菜)返回给主函数(Ben)。
public class Aunt { String str; public void cookMeal(Callback callback){ str=" 香喷喷的饭菜来咯 "; // 这个就是煮饭的过程 callback.Done(str); }}测试类
public class test { /** * @param args */ public static void main(String[] args) { Aunt class2=new Aunt(); Ben class1=new Ben(); class1.havelunch(class2); }}结果:
刚才阿姨在煮饭的时候,阿 Ben 是傻乎乎地站在那里等,等同于是在陪阿姨做饭,这个就是同步回调。
时间怎么可以这么浪费的呢。下面来看看异步回调。
异步回调
这个时候,阿姨还是规规矩矩地做饭。而啊 Ben,得同时做点事情。所以只需要修改 Ben 类。
public class Ben implements Callback { public void havelunch(final Aunt aunt){ new Thread(new Runnable() { //new 一个新的线程去做这个事情,并等待返回结果 @Override public void run() { aunt.cookMeal(Ben.this); } }).start(); play(); // 在阿姨做饭的时候可以玩一会手机先嘛。就不用傻傻地等了,阿姨煮好饭会喊吃的了。 } public void play(){ System.out.println(" 玩手机,刷微博,朋友圈,聊扣扣 "); } @Override public void Done(String str) { System.out.println(str); }}结果:
总结:
回调函数就是那么一回事。
今天在一篇 nodejs 的文章看到了一句话是这么说的:
在代码中,异步编程的直接体现就是回调。异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。
说的不就是这个道理么。呵呵。
以上是我个人的理解,如有错误,望指出。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
java回调函数例子,及其原理,与代理模式的区别回调函数应用程序(applicationprogram)会时常通过API调用库里所预先备好的函数。但是有些库函数
C++中回调函数详解及简单实例回调函数调用关系图对于第一种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数。对于第二种情
本文实例讲述了PHP回调函数概念与用法。分享给大家供大家参考,具体如下:一、回调函数的概念先看一下C语言里的回调函数:回调函数就是一个通过函数指针调用的函数。如
回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考。回调函数原理:
python中有用到回调函数的时候,而回调函数又需要返回数值的时候,就需要先将所被传为回调函数的函数先赋值给一个变量,然后等回调结束之后,将这个变量取值回来就可