Node Style Guide [Nodejs 编码规范]

Node Style Guide [Nodejs 编码规范]

可能大部分的同学在写 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


16 回复

Node Style Guide [Nodejs 编码规范]

编写 Node.js 代码时,保持一致的编码风格非常重要。良好的编码习惯不仅可以让代码更易读,还能提高团队协作效率。本文档旨在提供一些基本的编码规范,帮助开发者写出更优雅、更易于维护的代码。

使用有意义的判断条件

复杂条件判断应该封装成有意义的方法或变量,以便增强代码的可读性和可维护性。

正确示例:

var isValidPassword = password.length >= 4 && /^(?=.*\d).{4,}$/.test(password);

if (isValidPassword) {
  console.log('winning');
}

错误示例:

if (password.length >= 4 && /^(?=.*\d).{4,}$/.test(password)) {
  console.log('losing');
}

尽早从函数中返回

为了避免过多的嵌套 if 语句,可以尽早从函数中返回。

正确示例:

function isPercentage(val) {
  if (val < 0) {
    return false;
  }

  if (val > 100) {
    return false;
  }

  return true;
}

错误示例:

function isPercentage(val) {
  if (val >= 0) {
    if (val < 100) {
      return true;
    } else {
      return false;
    }
  } else {
    return false;
  }
}

给闭包命名

为闭包或匿名函数命名,以提高代码的可读性和调试的便利性。

正确示例:

req.on('end', function onEnd() {
  console.log('winning');
});

错误示例:

req.on('end', function() {
  console.log('losing');
});

避免嵌套闭包

虽然可以使用闭包,但避免嵌套多个闭包,这样可以使代码更清晰简洁。

正确示例:

setTimeout(function() {
  client.connect(afterConnect);
}, 1000);

function afterConnect() {
  console.log('winning');
}

错误示例:

setTimeout(function() {
  client.connect(function() {
    console.log('losing');
  });
}, 1000);

以上规范不仅适用于个人开发,也适用于团队合作。遵循这些规则,可以帮助你写出更加整洁、高效的 Node.js 代码。希望这些指南对你有所帮助!

点击查看完整版本

欢迎 Star, Fork, Pull Request!


支持,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 里面在判断什么。

好东西, 顶起!!

80字符太少了,断行太多影响阅读代码。 有地方推荐110字符。

文件命名个人比较喜欢用 - 来分割 例如 child-process.js

等大家去给github提交pull request的时候,就会知道早养成这些习惯,是多么愉快的事情。

给你的闭包命名 这个章节,有点不解,如果用node v6.0 + 那不推荐使用箭头函数么?

三元表达式还是喜欢写在同一行

以下是一些关于Node.js编码规范的建议,基于您提供的内容进行了扩展:

使用有意义的判断条件

复杂条件应该封装到有意义的方法或变量中,以提高代码的可读性和可维护性。

正确示例:

const hasValidEmail = email => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);

if (hasValidEmail(email)) {
  console.log('Email is valid.');
}

错误示例:

if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
  console.log('Email is valid.');
}

尽早从函数中返回

这样可以避免深层嵌套的if语句,使代码更清晰。

正确示例:

function isNumberInRange(value, min, max) {
  if (value < min) return false;
  if (value > max) return false;
  return true;
}

错误示例:

function isNumberInRange(value, min, max) {
  if (value >= min) {
    if (value <= max) {
      return true;
    }
  }
  return false;
}

给闭包命名

为闭包和匿名函数命名,有助于调试时提供更有意义的信息。

正确示例:

fs.readFile('file.txt', function readFileCallback(err, data) {
  if (!err) {
    console.log(data.toString());
  }
});

错误示例:

fs.readFile('file.txt', function(err, data) {
  if (!err) {
    console.log(data.toString());
  }
});

避免嵌套闭包

尽量减少闭包的嵌套,以保持代码结构清晰。

正确示例:

setTimeout(() => {
  client.connect(onConnect);
}, 1000);

function onConnect() {
  console.log('Connection established.');
}

错误示例:

setTimeout(() => {
  client.connect(() => {
    console.log('Connection established.');
  });
}, 1000);

这些编码规范可以帮助您编写出更加清晰、易读且易于维护的Node.js代码。

回到顶部