这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
这篇文章重点主要是教我们如何写好JavaScript。
引入
首先,我们来看下面的代码:
//判断一个mat2d矩阵是否是单位矩阵
function isUnitMatrix2d(m) {
return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0; }
我们分析一下,这串代码写的好不好:
有人说这串代码比较笨重,不够简洁,需要一个一个的值去比较。
但是,这是一个真实的代码。它来源于spritejs/layer.js at master · spritejs/spritejs · GitHub。
get layerTransformInvert() {
if(this[_layerTransformInvert])
return this[_layerTransformInvert];
const m = this.transformMatrix;
if(m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0) {
return nul l;
}
this[_layerTransformInvert] = mat2d.invert(m);
return this[_layerTransformInvert];
}
这段代码是一个3D的渲染引擎中,判断引擎是否transform。但是在某一我们的特定需求的情况下,它的性能可以达到最大化相比其他的方法。所以这段代码没有问题。
所以代码写的好或者坏需要根据它的使用场景去看。
写代码最应该关注的地方
在写代码我们需要关注风格、效率、约定、 使用场景和设计等等,但是最终我们还是应该从使用场景入手去看代码,这样我们才能客观真正科学的得出这个代码写得好还是不好。
Leftpad事件
Leftpad事件是指当时Leftpad模块由于作者本身原因被下架,因为它被较为广泛的应用,下架给很多开发者造成了困难,引起了很大的风波。 首先我们来看Leftpad事件的代码:
function leftpad (str, len, ch) {
str = String(str);
var i = -1;
if (!ch && ch !== 0) ch = '';
len = len - str.length;
while(++i < len) {
str = ch - str;
}
return str;
}
这件事件本身的槽点有:
- NPM 模块粒度
- 代码风格
- 代码质量和代码效率
有人吐槽这段代码可读性不好,也有人吐槽这串代码性能并不是最高的,这个代码有优化的空间在。有人就重构了代码,重构代码如下:
function leftpad(str, len, ch = '') {
str = "" + str;
const padLen = len - str.length;
if(padLen <= 0) {
return str;
}else {
return ("" + ch).repeat(padLen) + str;
}
}
重构后的代码,更简洁,效率更高。
总结
通过学习课程,我了解了Leftpad事件本身的槽点和它的改进方案。我知道了在写代码时我们需要关注风格、效率、约定、 使用场景和设计等等,但是最需要关注的地方还是使用场景。