在“轻语言”的世界里,事件是实现结果回调、函数式编程的核心概念。然而,对于许多初学者或追求效率的开发者来说,每当需要一个特定的回调函数时就去定义一个全新的回调接口时,无疑会增加代码的冗长度和维护成本。
幸运的是,轻语言的作者 DrawGoy 在设计之初就为我们提供了一个强大的内置“通用回调”接口类。通用回调就像工具箱里的瑞士军刀,几乎可以应对所有常见的回调场景,可以让你的代码更加简洁、优雅且易于理解。
一、认识“通用回调”
通用回调是为了简化开发而预定义的,它位于核心库包“corelibrary.jar”中,因此无需额外引用即可在代码中使用。
接口名:通用回调
参数:(ID 为 整数型,回调值 为 对象)
二、告别自定义回调接口:实战应用场景
让我们通过几个典型的安卓开发场景,看看如何用“通用回调”替代繁琐的自定义回调接口吧。
1、代替事件消息分发事件
假设现在我们有一个模块,模块中定义了一个函数,函数的功能是获取指定网址的源代码,如果使用事件消息分发,则需要在接收窗口提前注册子函数接收消息,但使用回调就无需那么麻烦。
`模块1.spc`
函数 静态 获取网页源码(地址 为 文本型,分发事件 为 通用回调)
异步执行首
变量 源码 = 取网页源码(地址,"UTF-8",5000)
到主线程
分发事件.执行(1,源码)
异步执行尾
结束 函数`窗口1.spl`
事件 按钮_通用回调.被单击(来源对象 为 视图)
' 参数2通过拉姆达表达式接收“分发事件.执行(1,源码)”的参数值
模块1.获取网页源码("http://www.vcnstudio.com",(ID,回调结果)->{
标签1.标题 = "我是通用回调传回的结果;值为:" + 到文本(回调结果)
})
结束 事件2、自定义模块或组件向外传递数据
假设我们现在需要定义一个组件或模块,并希望可以分享这个模块给别人或在其它项目中使用,此时如果模块中需要向外传递异步数据时,传统的方式是通过自定义事件或自定义回调接口实现的,而使用通用接口则可以在简化代码的同时也实现相同的功能。
`自定义翻译器.spc`
变量 翻译完毕 为 通用回调
函数 中文到英文(待翻译中文 为 文本型)
异步执行首
变量 翻译结果 = 调用API翻译(待翻译中文)
到主线程
如果(翻译完毕 != 空)
翻译完毕.执行(1,翻译结果)
结束 如果
异步执行尾
结束 函数
函数 英文到中文(待翻译英文 为 文本型)
异步执行首
变量 翻译结果 = 调用API翻译(待翻译英文)
到主线程
如果(翻译完毕 != 空)
翻译完毕.执行(2,翻译结果)
结束 如果
异步执行尾
结束 函数
函数 置翻译完毕回调(参_翻译完毕 为 通用回调)
本对象.翻译完毕 = 参_翻译完毕
结束 函数在 `窗口1.spl`中使用
事件 按钮1.被单击(来源对象 为 视图)
变量 自定义翻译器1 = 创建 自定义翻译器()
' 使用拉姆达表达式接收
自定义翻译器1.置翻译完毕回调((ID,翻译结果)->{
如果(ID == 1)
调试输出("中文到英文翻译完毕:" + 翻译结果)
结束 如果
})
' 使用子函数接收翻译完毕事件
自定义翻译器1.置翻译完毕回调(&自定义翻译器1_翻译完毕)
' 注意:以上两种情况接收回调只能同时使用一种
自定义翻译器1.中文到英文("欢迎使用VcnStudio开发平台")
结束 事件
函数 自定义翻译器1_翻译完毕(ID 为 整数型,翻译结果 为 对象)
如果(ID == 1)
调试输出("中文到英文翻译完毕:" + 翻译结果)
结束 如果
结束 函数三、总结
通用回调不仅仅是内置接口,它同时也是轻语言为开发者提供的一个便捷功能。通过熟练掌握其用法,您可以:
减少样板代码: 无需再为每一个简单的回调场景定义新的回调接口。
提高代码可读性: 通过参数接收回调,清楚地表明了回调目的,意图一目了然。
增强代码的函数式特性: 使得传递行为(函数)作为参数变得更加自然和普遍。
顶一下,教程难做可以多写写这种文章,不然总觉得除了老大自己能用好这个软件,其它人都是半懂不懂也没地方学,单看文档又没办法完全明白![[[坏笑]]](http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/2018new_huaixiao_org.png)