什么是 by-contract?
by-contract 是一个用于 JavaScript 应用程序的协定库,它允许开发者编写参数和返回值的契约,从而能够更精确、更可靠地编写防御式编程。
by-contract 遵循设计契约模式的三个主要原则:
- 保证先决条件被满足,即在执行函数之前确保参数符合函数参数定义,也称为“输入合同”
- 保证后置条件得到满足,即确保函数返回符合函数定义的且是开发者期望的类型,也称为“输出合同”
- 在代码中对函数的调用处, 进行契约验证。
使用 by-contract,我们可以像下面这样的方式来编写函数:
-- -------------------- ---- ------- --- -------- - ---------------------- -------- --------- -- - ------------------- ----------------- --------- ------- ------ - - -- -展开代码
上述代码中,我们使用 by-contract 来验证 divide 函数的参数类型为数字,并希望返回浮点数类型。如果在执行过程中发现参数类型不正确,by-contract 将会抛出异常。
开始使用 by-contract
安装
by-contract 可以通过 npm 下载安装,运行以下命令:
npm install by-contract
然后你就可以在你的代码中引入 by-contract:
var contract = require('bycontract');
基本用法
下面我们来看一个简单的例子:编写一个将两个数字相加的函数。
-- -------------------- ---- ------- --- -------- - ---------------------- -------- ------ -- - ------------------- ----------------- --------- ------------------ ------- ------ - - -- -展开代码
在上述代码中,我们使用 by-contract 来验证 add 函数的参数为数字,返回值为数字。在执行过程中,如果参数不符合类型限制,则会抛出异常。
复杂用法
除了简单用法外,by-contract 还支持多个参数和返回值,并且可以在契约中添加条件。
多个参数的契约
-- -------------------- ---- ------- --- -------- - ---------------------- -------- ---------------- ---- - ------------------- ----------------- --------- ---------- ----- --------- ---- -------- -- ------- ------ - ----- ----- ---- --- -- -展开代码
上述代码中,我们定义 makePerson 函数要求两个参数分别为字符串和数字,并将返回值声明为包含 name
和 age
两个成员的对象。
条件契约
可以通过 .where()
方法在契约中添加条件:
-- -------------------- ---- ------- --- -------- - ---------------------- -------- ------ -- - ------------------- ----------------- --------- ------------------ ------------------ -- ------- - ------ ------ --- - - -- -- ------- ------ - - -- -展开代码
上述代码会在契约中添加一个条件,即验证返回值必须等于两个参数相加。
总结
by-contract 让我们可以更好地编写防御式编程。使用 by-contract,我们可以为函数设定契约限制其参数和返回值,从而确保代码的可靠性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055d2181e8991b448dad43