可能大部分的同学在写 node 的时候,都会有自己的风格,但是 node 的代码,稍不注意就变成了一坨shit。 最近这几天在整理公司的 node 编程相关的资料,于是把 felixge 的node-style-guide翻译了一下,顺便加上了一些这两年 node 实际项目中以及 node 源码中的一些代码风格规范。
其中有一些老生长谈的东西,例如用空格还是用tab, {
放哪里,单引号还是双引号。
还有一些在日常编码里面非常容易忽视的东西,例如:
使用有意义的判断条件
所有复杂的条件判断都需要赋予一个有意义的名字或者方法。
Right:
var isValidPassword = password.length >= 4 && /^(?=.*\d).{4,}$/.test(password);
if (isValidPassword) {
console.log('winning');
}
Wrong:
if (password.length >= 4 && /^(?=.*\d).{4,}$/.test(password)) {
console.log('losing');
}
尽早的从函数中返回
为了避免深入嵌套的 if 语句,请尽早的从函数中返回。
Right:
function isPercentage(val) {
if (val < 0) {
return false;
}
if (val > 100) {
return false;
}
return true;
}
Wrong:
function isPercentage(val) {
if (val >= 0) {
if (val < 100) {
return true;
} else {
return false;
}
} else {
return false;
}
}
给你的闭包命名
请尽量给你的闭包、匿名函数命名。 这让人知道你在意这个函数,更重要的是,这将会产生可读性更好的堆栈跟踪和CPU调用信息等。
Right:
req.on('end', function onEnd() {
console.log('winning');
});
Wrong:
req.on('end', function() {
console.log('losing');
});
不要嵌套闭包
使用闭包,但是不要嵌套他们,否则你的代码将会一团糟。
Right:
setTimeout(function() {
client.connect(afterConnect);
}, 1000);
function afterConnect() {
console.log('winning');
}
Wrong:
setTimeout(function() {
client.connect(function() {
console.log('losing');
});
}, 1000);
点击查看完整版本,欢迎star, fork, pull request.
赶快来适应 node 的风格,写出漂亮的 node 代码吧 !:D
支持,start了
赞一个.
支持编码规范,有个小的不同意见:
请尽量给你的闭包、匿名函数命名
匿名函数的存在是减少不必要的函数名,增加代码易读性。对只有一两行代码的事件响应函数,没有必要命名。
支持编码规范,有个小的不同意见: 使用有意义的判断条件 这只是单纯为了代码可读性,个人觉得如果wrong块改成以下方式也有很好的可读性,而且不用老是想变量名:
if (password.length >= 4 && /^(?=.*\d).{4,}$/.test(password)) {
throw "invalid password";
}
所以是尽量,但是碰到稍微复杂一点的或者关键性的匿名函数,有自己的函数名帮助是非常大的。 例如,中间件返回函数,最好都有一个函数名,可以支持更友好的调试。
复杂一点的事件响应函数,一般都建议这样写:
function onconnect() {
// do something
}
e.on('connect', onconnect);
当然,一些简单的就没有必要了
现在超长一行的代码可读性上也没有优势吖。 而且并不是每个人的屏幕都是超大的。 在我的air上,其实最多也就显示到100个字符左右…
var isValidPassword = password.length >= 4 && /^(?=.*\d).{4,}$/.test(password);
```js
给这种复杂判断命名,这样在读代码的时候,可以不用再去思考这个正则代表什么,为什么用 && 不是用 || 等等。
因为大部分的判断之后执行的逻辑,并不像例子中这么简单,可以一目了然的让你明确这个 if 里面在判断什么。
好东西, 顶起!!
@dead_horse 同意
80字符太少了,断行太多影响阅读代码。 有地方推荐110字符。
文件命名个人比较喜欢用 - 来分割 例如 child-process.js
@dead_horse 嗯,我理解你的意思,如果判断之后执行的逻辑不简单,我倒宁愿把复杂逻辑封装起来,例如:
do something if password.length >= 4 and /^(?=.*\d).{4,}$/.test password
等大家去给github提交pull request的时候,就会知道早养成这些习惯,是多么愉快的事情。
支持
@dead-horse 请问下 有一个规则,给闭包取一个名字,在你们team是否强制要求的?
@hinson0 团队内未强制,但是我一般都会这样写:
app.on('error', onerror);
function onerror() {}
给你的闭包命名 这个章节,有点不解,如果用node v6.0 + 那不推荐使用箭头函数么?
三元表达式还是喜欢写在同一行