前言
良好的JavaScript书写习惯的优点不言而喻,今天彬Go向大家推荐Dojo Javascript 编程规范,相当不错的 Javascript 编程风格规范,建议大家可以借鉴一下此规范编写 Javascript。感谢i.feelinglucky的翻译。
序
Any violation to this guide is allowed if it enhances readability.
所有的代码都要变成可供他人容易阅读的。
快读参考
核心 API 请使用下面的风格:
结构 | 规则 | 注释 |
模块 | 小写 | 不要使用多重语义(Never multiple words) |
类 | 骆驼 | |
公有方法 | 混合 | 其他的外部调用也可以使用 lower_case(),这样的风格 |
公有变量 | 混合 | |
常量 | 骆驼 或 大写 |
下面的虽然不是必要的,但建议使用:
结构 | 规则 |
私有方法 | 混合,例子:_mixedCase |
私有变量 | 混合,例子:_mixedCase |
方法(method)参数 | 混合,例子:_mixedCase, mixedCase |
本地(local)变量 | 混合,例子:_mixedCase, mixedCase |
命名规范
1.变量名称 必须为 小写字母。
2.类的命名使用骆驼命名规则,例如:
Account, EventHandler
3.常量 必须 在对象(类)或者枚举变量的前部声明。枚举变量的命名必须要有实际的意义,并且其成员 必须 使用骆驼命名规则或使用大写:
var NodeTypes = { Element : 1, DOCUMENT: 2 }
4.简写单词 不能使用 大写名称作为变量名:
getInnerHtml(), getXml(), XmlDocument
5.方法的命令 必须 为动词或者是动词短语:
obj.getSomeValue()
6.公有类的命名 必须 使用混合名称(mixedCase)命名。
7.CSS 变量的命名 必须 使用其对应的相同的公共类变量。
8.私有类的变量属性成员 必须 使用混合名称(mixedCase)命名,并前面下下划线(_)。例如:
var MyClass = function(){ var _buffer; this.doSomething = function(){ }; }
9.变量如果设置为私有,则前面 必须 添加下划线。
this._somePrivateVariable = statement;
10.通用的变量 必须 使用与其名字一致的类型名称:
setTopic(topic) // 变量 topic 为 Topic 类型的变量
11.所有的变量名 必须 使用英文名称。
12.变量如有较广的作用域(large scope),必须使用全局变量;此时可以设计成一个类的成员。相对的如作用域较小或为私有变量则使用简洁的单词命名。
13.如果变量有其隐含的返回值,则避免使用其相似的方法:
getHandler(); // 避免使用 getEventHandler()
14.公有变量必须清楚的表达其自身的属性,避免字义含糊不清,例如:
MouseEventHandler
,而非 MseEvtHdlr。
请再次注意这条规定,这样做得的好处是非常明显的。它能明确的表达表达式所定义的含义。例如:
dojo.events.mouse.Handler // 而非 dojo.events.mouse.MouseEventHandler
15.类/构造函数 可以使用 扩展其基类的名称命名,这样可以正确、迅速的找到其基类的名称:
EventHandler
UIEventHandler
MouseEventHandler
基类可以在明确描述其属性的前提下,缩减其命名:
MouseEventHandler as opposed to MouseUIEventHandler.
特殊命名规范
术语 “get/set” 不要和一个字段相连,除非它被定义为私有变量。
前面加 “is” 的变量名 应该 为布尔值,同理可以为 “has”, “can” 或者 “should”。
术语 “compute” 作为变量名应为已经计算完成的变量。
术语 “find” 作为变量名应为已经查找完成的变量。
术语 “initialize” 或者 “init” 作为变量名应为已经实例化(初始化)完成的类或者其他类型的变量。
UI (用户界面)控制变量应在名称后加控制类型,例如: leftComboBox, TopScrollPane。
复数必须有其公共的名称约定(原文:Plural form MUST be used to name collections)。
带有 “num” 或者 “count” 开头的变量名约定为数字(对象)。
重复变量建议使用 “i”, “j”, “k” (依次类推)等名称的变量。
补充用语必须使用补充词,例如: get/set, add/remove, create/destroy, start/stop, insert/delete, begin/end, etc.
能缩写的名称尽量使用缩写。
避免产生歧义的布尔变量名称,例如:
isNotError, isNotFound 为非法
错误类建议在变量名称后加上 “Exception” 或者 “Error”。
方法如果返回一个类,则应该在名称上说明返回什么;如果是一个过程,则应该说明做了什么。
文件
缩进请使用 4 个空白符的制表位。
如果您的编辑器支持 文件标签_(file tags),请加添如下的一行使我们的代码更容易阅读:
// vim:ts=4:noet:tw=0:
译注:老外用 VIM 编辑器比较多,此条可以选择遵循。
代码折叠必须看起来是完成并且是合乎逻辑的:
var someExpression = Expression1 + Expression2 + Expression3;var o = someObject.get( Expression1, Expression2, Expression3 );
注:表达式的缩进与变量声明应为一致的。
注:函数的参数应采用明确的缩进,缩进规则与其他块保持一致。
变量
布局
块
普通代码段 应该 看起来如下:
while (!isDone){ doSomething(); isDone = moreToDo(); }
IF 语句 应该 看起来像这样:
if (someCondition){ statements; } else if (someOtherCondition){ statements; } else { statements; }
FOR 语句 应该 看起来像这样:
for (initialization; condition; update){ statements; }
WHILE 语句 应该 看起来像这样:
while (!isDone) { doSomething(); isDone = moreToDo(); }
DO … WHILE 语句 应该 看起来像这样:
do { statements; } while (condition);
SWITCH 语句 应该 看起来像这样:
switch (condition) { case ABC: statements; // fallthrough case DEF: statements; break; default: statements; break; }
TRY … CATCH 语句 应该 看起来像这样:
try { statements; } catch(ex) { statements; } finally { statements; }
单行的 IF – ELSE,WHILE 或者 FOR 语句也 必须 加入括号,不过他们可以这样写:
if (condition){ statement; }
while (condition){ statement; }
for (intialization; condition; update){ statement; }
空白
注释
文档
下面提供了一些基本的函数或者对象的描述方法:
总结(summary): 简短的表述此函数或者对象实现的目的
描述(description): 对于此函数或者类的简短的描述
返回(return): 描述此函数返回什么(并不包括返回类型)
基本函数信息
function(){ // summary: Soon we will have enough treasure to rule all of New Jersey. // description: Or we could just get a new roomate. // Look, you go find him. He don't yell at you. // All I ever try to do is make him smile and sing around // him and dance around him and he just lays into me. // He told me to get in the freezer 'cause there was a carnival in there. // returns: Look, a Bananarama tape! }
对象函数信息
没有返回值描述
{ // summary: Dingle, engage the rainbow machine! // description: // Tell you what, I wish I was--oh my g--that beam, // coming up like that, the speed, you might wanna adjust that. // It really did a number on my back, there. I mean, and I don't // wanna say whiplash, just yet, cause that's a little too far, // but, you're insured, right? }
函数的声明
在有的情况下,对于函数的调用和声明是隐义(invisible)的。在这种情况下,我们没有办法在函数中加入说明等(供程序调用)。如果您遭遇了这种情况,您可以使用一个类来封装函数。
注:此此方法只能在函数没有初始化的参数情况下。如过不是,则它们会被忽略。
dojo.declare( "foo", null, { // summary: Phew, this sure is relaxing, Frylock. // description: // Thousands of years ago, before the dawn of // man as we knew him, there was Sir Santa of Claus: an // ape-like creature making crude and pointless toys out // of dino-bones, hurling them at chimp-like creatures with // crinkled hands regardless of how they behaved the // previous year. // returns: Unless Carl pays tribute to the Elfin Elders in space. } );
<h3>参数</h3>
<ol>
<li>简单类型
简单的类型的参数可以直接在函数参数定义中注释说明。
[cc lang="javascript"]function(/*String*/ foo, /*int*/ bar)...
可变类型参数
下面是几个修饰符供参考:
? 可选参数
… 说面参数范围不确定
数组
function(/*String?*/ foo, /*int...*/ bar, /*String[]*/ baz)...
全局参数描述
如果你想增加一个描述,你可以将它们移至初始化块。
基本信息格式为: *关键字* 描述字段 ( *key* Descriptive sentence)
参数和变量的格式为: *关键字* ~*类型*~ 描述字段 ( *key* ~*type*~ Descriptive sentence)
注: *关键字* 和 ~*类型*~ 可以使用任何字母和数字表述。
function (foo, bar) { // foo: String // used for being the first parameter // bar: int // used for being the second parameter }
变量
由于实例变量、原型变量和外部变量的声明是一致的,所以有很多的方法声明、修改变量。具体的如何定义和定位应在变量最先出现的位置指明变量的名称、类型、作用域等信息。
function foo() { // myString: String // times: int // How many times to print myString // separator: String // What to print out in between myString* this.myString = "placeholder text"; this.times = 5; } foo.prototype.setString = function (myString) { this.myString = myString; } foo.prototype.toString = function() { for(int i = 0; i < this.times; i++) { dojo.debug(this.myString); dojo.debug(foo.separator); } } foo.separator = "=====";
对象中的变量注释
应使用和对象值和方法一致的标注方式,比如在他们声明的时候:
{ // key: String // A simple value key: "value", // key2: String // Another simple value }
返回值
因为函数可以同时返回多个不同(类型)的值,所以应每个返回值之后加入返回类型的注释。注释在行内注释即可,如果所有的返回值为同一类型,则指明返回的类型;如为多个不同的返回值,则标注返回类型为”mixed”。
function() { if (arguments.length) { return "You passed argument(s)"; // String } else { return false; // Boolean } }
伪代码(有待讨论)
有时候您需要在函数或者类中添加对于此函数和类的功能性流程描述。如果您打算这样做,您可以使用 /*======== (= 字符最好出现 5 次或者更多),这样做的好处就是可以不用将这些东西加入代码(译注:原作者的意思可能为代码管理系统)。
这样看起来在 /*===== 和 =====*/ 会有非常长的一段注释,等待功能调整完毕以后就可以考虑是否删除。
/*===== module.pseudo.kwArgs = { // url: String // The location of the file url: "", // mimeType: String // text/html, text/xml, etc mimeType: "" } =====*/function(/*module.pseudo.kwArgs*/ kwArgs){ dojo.debug(kwArgs.url); dojo.debug(kwArgs.mimeType); }
原文链接: http://dojotoolkit.org/developer/StyleGuide
翻译(Translated by):i.feelinglucky{at}gmail.com from http://www.gracecode.com
本文向大家介绍培养自己的php编码规范,包括了培养自己的php编码规范的使用技巧和注意事项,需要的朋友参考一下 为什么我们要培养自己的编码规范? 我们写代码的时候,一个好的编码规范,对我们来说能够起到很多意向不到的效果。至少会有一下的好处: 1、提高我们的编码效率。整齐划一的代码方便我们进行复制粘贴嘛! 2、提高代码的可读性。 3、显示我们专业。别人看到了我们的代码,发现整个代码的书写流程都整齐划
1 前言 JavaScript 是最火的前端脚本语言(近些年因为CommonJS规范的完善和NodeJS的诞生,JavaScript使用了包和模块管理的方式,走前端开发方向的请自行去了解)。本文档的目标是使 JavaScript 代码风格保持一致,容易被理解和被维护。 虽然本文档是针对 JavaScript 设计的,但是在使用各种 JavaScript 的预编译语言时(如 TypeScript 等
编程规范是对编程的一种约定,主要作用是增强代码的可读性和可维护性,便于代码重用。 首先要求程序中的各个要素都遵守命名规则,然后在编码中严格按照编码格式编写代码。命名规则包括以下几点。 包的名称由一个小写字母序列组成。 类的名称由大写字母开头,其他字母都由小写的单词组成。 类的实例的名称由一个小写字母开头,后面的单词由大写字母开头。 常量的名称都大写,并且指出完整含义。 参数的名称无其他具体规定。
这里我将描述文档编写规范格式,将从一下几个方面进行详细的介绍。 标题 文本 段落 数字 标点符号 文档体系 标题 定义文档中标题的使用规范。 层级 一级标题:文章的主标题 二级标题:文章的主干章节标题 三级标题:章节下的分支标题 四级标题:属三级标题内的分支标题 示例 # 一级标题 ## 二级标题 ### 三级标题 #### 四级别标题 原则 一级标题,全文仅能有一个一级标题,在本站中每篇文章的
这个编码规范是给TypeScript开发团队在开发TypeScript时使用的。 对于使用TypeScript的普通用户来说不一定适用,但是可以做为一个参考。 命名 使用PascalCase为类型命名。 不要使用I做为接口名前缀。 使用PascalCase为枚举值命名。 使用camelCase为函数命名。 使用camelCase为属性或本地变量命名。 不要为私有属性名添加_前缀。 尽可能使用完整的
以下是 Electron 项目的编码规范,您可以运行 npm run lint来显示 cpplint和 eslint检测到的任何规范问题 C++ 和 Python 对于C ++和Python,我们遵循Chromium的编码风格. 您可以使用clang-format自动格式化C ++代码.也可以使用 script/cpplint.py 来检验文件是否符合要求. 我们目前使用的 Python 版本是