javascript 中的自动化—元编程(上)

有关元编程,关键是 meta 这个词的理解,这里翻译成元编程,编程对于我们来说理解应该上没有什么问题。关键就是元这个字。首先理解好元才能更好地元编程。但从 meta 这个词本意来看,其实本意是高级和二次元的意思。最近由于人力有限,在研究让代码来写代码,从而接触到元编程。今天看一看在 javascript 中的元编程。

元编程定义

批量生成各种代码(类,方法,测试等等),减少编程时的重复操作,而且是在运行时而不是编译时。而且元编程是将程序理解为数据,读取这些数据来在运行时生产代码。

顺便说说Lisp,大家都知道“代码及数据”这回事,其实就是这样子一回事。那么简单地理解元编程的定义就是写出编写代码的代码,lisp 语言中可以使用 quote 可以阻止求值,到需要使用的时候用eval就行了。

在 javascript 中,我们也可使用 eval 来执行带代码字符串,但是不推荐大家去用这个来实现元编程。

了解 excel 的朋友要一定对宏并不陌生,经常会报宏错误。可以执行宏命令来实现一系列的经常被用到操作。在编程中也是,我们在 c++ 和 rust 都使用到宏来预定义一些结构或代码段

c++和 rust

在 javascript 我们可以使用 sweet.js 来实现宏定义结构,程序或操作符。可以安装 sweet-js/cli 使用 -g 表示全局安装 npm install -g @sweet-js/cli

我们将语法 hi 定义为一个输出函数,只要执行 hi 就等同调用该函数。

也可以定操作符 >>=  来实现宏定义目的。重新定义操作符的功能。

用起来很方便吧。不过这些都是在运行前的编译期完成的,也就是根据一定规则将宏编译为预先定义好的代码放置其所在位置等待执行,这一切都发生运行代码之前。

元编程也可以在运行时进行,这里先介绍一下反射,有关反射,简单的说,就是提供某种机制,在运行时可以获得一些对象和类型的结构信息。

反射有以下一些特性,内省,说白了具有自我检查功能;自修改时在运行程序可以自我修改。调节这里翻译不准确,其含义就是程序可以自行地做出决定,下面通过代码来对这些概念进行进一步说明。

还是用英文吧,中文感觉有点别扭。第一个是 introspection  以后想到恰到好处的翻译时,再给大家解释吧,这里我们定义 keys 可以获取 hero 对象的所有属性。检查对象的属性。

第二个是 self-modification 当输入 a 参数大于 5,我们将 grumpySum 行为进行修改。输出方式不再是 a + b 而是仅输出 0。这是在运行时有参数值来决定的。

最后一个是 intercession,这里给 hero 对象定义 status 属性,定义时 status 的行为是由 health 动态地所决定的。

你可能感兴趣的:(javascript 中的自动化—元编程(上))