Felix's Node.js Style Guide (Part 1)

本文为译文,翻译自原文 http://nodeguide.com/style.html 标题咱就不翻了吧,说实话guide这个词还真不好翻,不能显得很高深又不能显得很for dummy的样子,索性就不翻了…… 本guide应该较上篇略有意思,作者泰国海滩度假的时候写出来的东西想来也不会多么干巴巴(海滩不是到处都是水吗……),当然本文所涉及的编程风格之类的选择应该完全是作者自己的opinion,不代表我台观点。 ============================== 我是分割线 ============================== 本文不是node.js应用程序所应该遵循风格的官方文档。本guide只是试图带给你一整套instructions,虽说本人有点固执己见,但这套东西确实能让你创建美观且统一的软件。 本guide假设你只针对node.js。如果你的代码需要在浏览器或者其它环境里面运行,请勇敢的忽略其中一些部分。 另外请注意node.js和围绕node的其它很多package都有其自身略显不同的风格,所以如果你对那些项目感兴趣,请遵守他们那边的规则。(别到时被砍……译者注)

Tabs vs Spaces

让我们先从宗教式的信仰问题开始。我们仁慈的独裁者在node的核心代码里选择了用2个空格来缩进,所以跟着他是不会有错的。

分号

有很多非暴力不合作反抗分子试图偷走你的分号。不过不要犯傻,我们的传统美德还是有它存在的道理的,且确实存在的好好的。所以跟随社区,使用分号!

编辑器

你可以使用任何编辑器。不过如果有JS语法高亮并能用node.js执行当然正打开的文件的功能的话则会比较顺手。诚然vim可能不会给女生们留下深刻印象,但我们的BDFL却会很愉快,且你的爷爷(不是你爷爷的……译者注)也不会有什么意见。 这份文档是在我的iPad上的Notes程序里面打出来的,那是因为我那时正在泰国的某个海滩边上。所以你的工作环境很有可能也会影响到你的编辑器选择。(我知道你不就是想告诉我们你到泰国海滨度假了嘛,怎么跟我国很多mm一副德行…… 译者注)

结尾的空白字符

就像每顿饭之后要刷牙一样,你也会在每次提交你的JavaScript文件之前清理掉你的行末空白字符。否则这种粗心大意的疏漏使代码所散发出的某种异味会最终把你潜在的contributors和同事吓跑。

每行长度

每行限制在80个字符。是的我知道,和过去几年比,如今我们的屏幕已经大了好多,但是你的大脑可没有。屏幕其余空白的地方可以用来进行分列显示,你的编辑器应该支持分割screen的,对吧?(TextMate好像不支持,ft…… 译者怨念中……)

引号

除非你在写JOSN,不然请使用单引号。 正确: [cc lang=”javascript”] var foo = ‘bar’; [/cc] 错误: [cc lang=”javascript”] var foo = “bar”; [/cc]

大括号

你的前大括号应该放在和前面最近的那句语句的同一行上。 正确: [cc lang=”javascript”] if (true) { console.log(‘winning’); } [/cc] 错误: [cc lang=”javascript”] if (true) { console.log(‘losing’); } [/cc] 同时请留意一下,上面条件语句的前后都留有空格。

变量声明

每句var语句定义一个变量,这样会便于之后各行的重新排序。不一定非要把var定义在函数的最上面,Crockford那里曾强调过这点,但我们这里可以忽略,你觉得变量定义在哪里更说的通就定义在哪里。 正确: [cc lang=”javascript”] var keys = [‘foo’, ‘bar’]; var values = [23, 42]; var object = {}; while (items.length) { var key = keys.pop(); object[key] = values.pop(); } [/cc] 错误: [cc lang=”javascript”] var keys = [‘foo’, ‘bar’], values = [23, 42], object = {}, key; while (items.length) { key = keys.pop(); object[key] = values.pop(); } [/cc]

变量名和属性名

变量和属性名应该使用小驼峰式命名法(就是新单词的首个字母要大写,其余均小写,详见wiki,译者注)。它们还得有描述性。通常需要避免使用单个字符的变量或者不常用的缩写来作为变量或者属性名。 正确: [cc lang=”javascript”] var adminUser = db.query(‘SELECT FROM users …’); [/cc] 错误: [cc lang=”javascript”] var admin_user = d.query(‘SELECT FROM users …’); [/cc]

类名

类名应该使用大驼峰式命名法。 正确: [cc lang=”javascript”] function BankAccount() { } [/cc] 错误: [cc lang=”javascript”] function bank_Account() { } [/cc]

常量

常量应该被定义为普通变量或者静态的类属性,且应该全部采用大写字母。 Node.js / V8 实际上支持mozilla的const扩展,但是不幸的是这并不能应用到类的成员变量上(译者水平太搓,本句翻译着实有待考证,所以同时附上英文原文,待译者有空去查阅下mozilla的const extension究竟是啥么东东再做分解……),况且这也不是ECMA标准的一部分。 Node.js / V8 actually supports mozilla’s const extension, but unfortunately that cannot be applied to class members, nor is it part of any ECMA standard. 正确: [cc lang=”javascript”] var SECOND = 1 1000; function File() { } File.FULL_PERMISSIONS = 0777; [/cc] 错误: [cc lang=”javascript”] const SECOND = 1 1000; function File() { } File.fullPermissions = 0777; [/cc] 未完待续……

Buy me a coffee
  • Post author: Samson Wu
  • Post link: 3583.html
  • Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.
0%