从易到难读源码。
今天读的源码是NPM仓库 Arrify 。
方法 arrify
通过介绍可知,该方法是将任意类型的数据转为 Array 类型,并且特别说明了 null 和 undefined 将转为空数组。对功能有基本了解后看代码的四次判断:
- 若入参变量为 null 或 undefined 则直接返回空数组 [] ;
- 若入参变量本身就是数组 Array 类型,则直接返回该变量。这里看到判断方法使用了 Array.isArray(value) ,是 ES5 的方法,应该是不支持 ie8 的。
- 若入参变量是字符串类型,则返回 [value] 。
- 若入参变量的类型支持迭代器方法,那么解构返回 [...value] 。注意到这里直接使用 es6 的方法了。还有一个注意点是:字符串类型也是支持迭代器的,如果没有第 3 个判断拦着,这里会将字符串解构成一个字符数组,将不符合大部分应用场景,例:('abc') => ['a', 'b', 'c'] ,而我们更期望得到的是 ['abc'] 。
- 其他情况默认返回 [value]。
测试驱动开发
之前翻 Rust 的文档时,了解到 TDD 模式。感觉这里很类似。
使用 ava 这个仓库,在 test.js 目录下,将输入和目标输出都提前写好,然后再去写代码方法,让方法自动去执行测试用例,然后再改进方法。
通过这样的步骤去写代码,真的可以保证不会遗漏任何预设场景,还是很值得学习的。
不过看 ava 的 npm 文档时,顶部挂了大大的图片来挺乌反俄,还是有点败好感(雾)。
Typescript
核心代码并没有使用 TS 开发,可能是觉得没必要吧。但是补充了类型文档。可以说是麻雀虽小,五脏俱全了。
其它体会:
- 平时写业务代码,都会尽量避免大量的 if 判断叠着用,但是在写某种工具方法时,必要的堆叠判断还是可以接受的