写代码应该有一些原则,需要考虑代码的风格和效率,如果团队一起写的话还要考虑约定,最后要考虑我们的使用场景和应该如何设计。
在团队中,可能每个人的风格都不一样,有的人喜欢结尾用分号,有的人不用分号,还有缩进问题,有人喜欢用空格,有人喜欢用tab,tab缩进也有设置的4个字符有2个字符的。
其实风格没有什么优劣之分,但是在团队中应该注重风格的统一,我们可以使用ESLint来统一进行分风格的约束。
我们在写代码的时候有时候是可读性和效率二者不可兼得,这就需要根据我们的业务场景来进行判断。这个也没什么优劣之分,只不过是取舍问题了。
当年在GitHub上有很火的事件,left-pad开发者收回了它的开源代码,当时这个npm包很多大型项目都在用,我们来说说这个事情的槽点。 这个left-pad只有十一行代码
module.exports = 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;
}
我们看到上面的模块,就十一行代码,但是非常多的人在用它,放到今天其实我们是很难理解为什么这么多人在用。因为当年的打包工具不是很灵活,比如在模块里面引入了几个api,我们只想用这几个api,当时这个是不可以的,只能全部打包。
这个代码的风格其实可读性很好,on的算法效率也挺好的,我们也可以有改进的空间,可以是代码更简介,效率更高效。
// leftpad优化
function leftpad(str,len,ch = ' '){
str = " " + str;
const padlen = len - str.length;
if(padlen <= 0){
return str;
}else{
return (" " + ch).repeat(padlen) + str;
}
}
console.log(leftpad(1,8));
MDN里面也有一个示例 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat
最后我们还可以使用这个方法来进行优化。
var rpt = " ";
do {
rpt += srt;
str += str;
count &= count -1;
} while(count);
一般我们用这个不会太经常使用,没必要做过度优化。最后还是返回最上面所说的,我们一定要根据场景设定好我们的代码。