Tag Archives: 编码规范

茶饭后内部不完全ActionScript3编码规范 V0.1

声明:此文章基本上大概是差不多完全的参考了Adobe的Flex SDK编码规范。不算翻译也不算原创,只做内部参考文档使用。如有不详处请自行查阅原文。

1. 命名规范

命名语言
基于英文单词来命名,而不是无意义的字母组合或汉语拼音。

关于缩写
清楚的表达远比简短的缩写要重要,所以calculateOptimalValue()要比calcOptVal()好。非常常用的缩写除外。

单词边界
两种方式:intercaps命名法(LayoutManager或measuredWidth),underscores命名法(object_proxy)。

指定类型的名称
将类型放在最后一个单词。比如给一个带边框的Shape命名:border, borderSkin或borderShape,而不是border_mc。

Package命名
首字母小写,接下来按照intercaps命名法。比如:controls, listClasses。Package的名字必须是名词,而不能是动词,形容词或副词。

文件名
名称要与其内容相关。as文件使用intercaps命名法,比如ModalTransparencyStyles.as。资源文件使用underscores命名法,比如icon_align_left.png。

namespace命名
首字母小写,接下来按照underscores命名法。比如:mx_internal, object_proxy。

Interface命名
用I开头,接下来使用intercaps命名法。比如:IList, IFocusManager, IUID。

Class命名
首字母大写,接下来按照intercaps命名法。比如:Button, FocusManager, UIComponent。Event的子类叫FooBarEvent,Error的子类叫FooBarError。基类的名字一般 是:ComboBase, DateBase…

Event命名
首字母小写,接下来按照intercaps命名法。比如:\”move\”, \”creationComplete\”。

Style命名
首字母小写,接下来按照intercaps命名法。比如:color, fontSize。

常量命名
使用全部大写的字母和underscores命名法。比如:OFF, DEFAULT_WIDTH。

变量命名
首字母小写,接下来按照intercaps命名法。比如:i, width, numChildren。在for循环中使用i,j。在for-in循环中使用p。

成员变量命名
变量名前加下划线,首字母小写,接下来按照intercaps命名法。比如:_foo, _fooBar。

方法命名
首字母小写,接下来按照intercaps命名法。比如:measure(), updateDisplayList()。方法的名字应该是动词。

Event handler命名
事件处理器应该以\”Handler\”结尾。比如:mouseDownHandler()。如果要处理一个来自子组件的事件,应该在前面加上组件的名称和一个下划线。比如:textInput_focusInHandler()。

Argument命名
使用value作为setter函数的参数命名。使用event作为事件处理器参数的命名,而不是e或者evt。

2. 语法

类型声明
为每一个常量、变量、参数、返回值指定类型,如果不想指定类型,那么使用*。比如:var value:*; 不要var value;

使用紧缩的类型规则。比如,一个循环的计数器应该使用int,而不是Number,更不是Object或*。再比如,mouseDownHandler的参数应该是event:MouseEvent,而不是evetn:Event。

使用数组时,应该紧跟一个关于元素类型的注释,有助于阅读。比如:var a:Array /* for String */ = []; 而不是 var a:Array = [];

关于常量(Literals)
尽量不要使用undefined。
这样使用十六进制:0xFEDCBA而不是0Xfedcba。
指定RGB颜色时使用0x000000而不是0。
使用Number常量时,要0.0,1.0而不是0,1。
在像素坐标中,不要使用Number。
使用String常量时,要”what\’s up, \”Big Boy\”?”而不是’What\’s up, “Big boy”?’。
使用Array常量时,要[]而不是new Array(),要[1, 2, 3]而不是new Array(1, 2, 3)。
使用Object常量时, 要{}而不是new Object(),要o = {a: 1, b: 2, c: 3};而不是o = new Object(); o.a = 1; o.b = 2; o.c = 3;。
尽量不要使用函数常量。
使用RegExp常量时,要var pattern:RegExp = /d+/g;而不是var pattern:RegExp = new RegExp(\”\\d+\”, \”g\”);
使用XML常量时, 要var node:XML = <name first=\”Jane\” last=\”Doe\”/>;而不是var node:XML = new XML(\”<name first=\”Jane\” last=\”Doe\”/>\”);。
要var node:XML = <name first=\”Jane\” last=\”Doe\”/>;而不是var node:XML = <name first=\’Jane\’ last=\’Doe\’/>;

3. 代码格式

行宽度
在80个字符时换行。

缩进
使用4个空格来缩进,而不是Tab。可能需要配置你的代码编辑器。

主区块分隔符
//————————————————————————–
//
// Overridden methods
//
//————————————————————————–

次区块分隔符
//———————————-
// visible
//———————————-
在分隔符的上下各有一个空行。

声明分隔符
/**
* @private
* Holds something.
*/
var a:Number;
/**
* @private
*/
var b:Number

数组索引
要a[0]而不是a[ 0 ]。

逗号
逗号后面要跟一个空格。

类型声明
要var n:Number;而不是var n : Number;或 var n: Number;

赋值与运算符
在赋值运算符的两边各加一个空格。比如:要a = 1;而不是a=1;
在二元运算符两边各加一个空格。比如a + b * c而不是a+b*c。
在比较运算符两边各加一个空格。比如a == b而不是a==b。
在前缀运算符和操作数之间不要有空格。比如,要!o而不是! o。
在后缀运算符和操作数之间不要有空格。比如,要i++而不是i ++。

语句
为每一条语句开一个新行,这样你就可以在任何行加断点。
要这样
a = 1;
b = 2;
c = 3;
而不是这样
a = 1; b = 2; c = 3;
括号要上下对齐
要这样

而不是

if语句
在if后面紧跟一个空格,在左括号之后和右括号之前不要加空格。
要这样
if (a < b)
而不是
if(a < b)
if( a < b )
if ( a < b )

for语句
在for后面紧跟一个空格,在左括号之后和右括号之前不要加空格。
要这样
for (var i:int = 0; i < n; i++)
而不是
for(var i:int = 0; i < n; i++)
for( var i:int = 0; i < n; i++ )
for ( var i:int = 0; i < n; i++ )