上QQ阅读APP看书,第一时间看更新
1.4 元编程
元编程(Meta Programming)是面向对象之外,另一种我们在编程范式中经常选用的范式能力。在元编程模式下执行开发者编写的代码时,可以改变其他程序(或者自身)的行为,或者在运行代码时完成部分本应在代码编译时完成的工作。
元编程语言Ruby有一个经典的示例,如代码清单1-3所示。
代码清单1-3 Ruby元编程影响运行时
>> a NameError: undefined local variable or method 'a' for main:Object from (irb) 1 >> ruby has no bare words NameError: undefined local variable or method 'words' for main:Object from (irb) 1 >> def method_missing(*args); args.join(" "); end => nil >> ruby has bare words => "ruby has bare words"
在Ruby中,我们可以通过method_missing快速定义语法层面的方法,使得代码清单1-3中ruby has no bare words这类表达式前后两次输出截然不同的结果。
通过代码示例可以看出,元编程指的是编程语言提供的、在某些代码运行时由其自身通过修改某些语言环境的元信息(语言的高级设置),来影响其他代码解释行为的能力。
事实上,因为JavaScript的原型继承和解释型语言的特性,我们可以通过重新定义基础类型的原型方法,实现一些元编程能力;还可以通过较为底层的能力(如代理)和转换工具(如Babel插件),实现更多的元编程行为。
运行时可以通过元编程能力影响已有代码,代价是要承担更多未知错误的风险。当我们制作工具或向上寻求更多能力时,元编程能力(运行时元信息的操作)依然是至关重要的。
对于编码,我们希望在开发平台(可视化搭建、二次开发平台)、业务组件编码、构建时编码、运行时编码等多个编码层实现逐级向上做切面开发和元编程。