[转]让你的Flex MXML和ActionScript 3代码更规范:第一篇:命名篇

让你的Flex MXML和ActionScript 3代码更规范
推荐看原文:http://opensource.adobe.com/wiki ... /Coding+Conventions
翻译版权所有:By magicianzrh
作者博客:http://www.actionscript3.cn/

 

【第一篇:命名篇】
原文是:http://opensource.adobe.com/wiki ... /Coding+Conventions

命名规则
选择好的名字对创建易用和易于理解的代码具有决定性的作用。你应该多花时间去想想是不是给你的代码选择了一个正确的名字,特别是那是公共接口的一部分的时候。

我们(指Adobe)的命名标准大部分跟ECMAScript和Flash Player 9的保持一致。

--------------------------------------------------------------------------------------------------------

缩写
缩写应该按照一定的规则。比如 calculateOptimalValue() 就比calcOptVal()好很多。

确保意思清楚比缩写更为重要。当然如果你不去缩写,开发人员也没有必要去记住你是否把qualified缩写成qual还是qlfd。

然而我们已经把一些缩写规则统一标准化了。

•accessibility缩写为acc,比如ButtonAccImpl
•automatic缩写为auto,比如autoLayout
•evaluate缩写为eval,比如EvalBindingResponder
•implementation缩写为impl, 比如ButtonAccImpl
•information缩写为info,比如GridRowInfo
•number of缩写为num,比如numChildren
•minimum缩写为min,比如minWidth
•maximum缩写为max,比如maxHeight
•navigation缩写为nav,比如NavBar
•regular expression缩写为regexp,比如RegExpValidator
•utility缩写为util,比如StringUtil
这个列表或许没有把当前我们使用的所有缩写都包括进去。如果你在考虑使用一个没有列出来的缩写,请先搜索源代码确定缩写是否已经被使用。如果你没有找到,多想想缩写是不是真的适合。

偶然我们会在同一个缩写中不一致(谨慎的认为)。比如,在大多场合,我们都完整的拼写出horizontal和vertical,正如horizontalScrollPolicy和verticalScrollPolicy但我们在一些非常常用的容器HBox和VBox中缩写为H和V。
--------------------------------------------------------------------------------------------------------

取首字母的缩写
在Flex中各种取首字母的缩写是很常见的,比如AIR, CSS, HLOC, IME, MX, MXML, RPC, RSL, SWF, UI, UID, URL, WSDL, 和XML。

一个取首字母的缩写总是全大写字母或者全小写字母(比如,SWF或者swf,但从来不Swf)。唯一使用欧冠全小写字母的时候是当首字母缩写用在identifier的时候,或者在identifier的开头,和identifier应该是小写字母开头的时候。比如 CSSStyleDeclaration、IUID、uid、IIME和imeMode。
--------------------------------------------------------------------------------------------------------

命名中单词的划分
当一个识别符包含多个单词时,我们使用两个方式来区别单词间的划分:大小写划分(如LayoutManager或measuredWidth)和下划线划分(比如object_proxy)。

有时候一些单词组合已经成为一个新单词,这样导致划分不清晰,并且我们在一些地方也很不幸的发生了混乱,比如dropdown、popUp和pulldown。

当两个首字母缩写连在一起的时候我们根据首字母缩写规则命名。loadCSSURL()就是一个很好的例子,尽管很少使用,不过应该尽量避免这种命名。
--------------------------------------------------------------------------------------------------------

指定类型命名
如果你想在命名中统一类型,把它放在命名的最后一部分。别在使用老的ActionScript 1的把类型作为衔尾部分连接上去的习惯,如把_mc放在最后来表示类型。现在命名一个名字为boarder的Shape,按新规则是border、borderShape或者borderSkin,但不会是border_mc。

一般的,最好的为一个物品命名就是把它的类型简单的作为它的名字

var button:Button = new Button();
--------------------------------------------------------------------------------------------------------

Package命名
命名开始用小写字母并且用首字母大小写划分后面的单词:controls、listClasses。

Package命名应该总是名词或者动名词(就是动词后面加上ing),不要用动词,形容词或者副词。

一个包含许多类似的功能代码的Package应该有个一个复数的名字:charts,collections, containers, controls, effects, events, formatters, managers, preloaders, resources, skins, states, styles, utils, validators。

一个表明一个概念的package通常使用一个动名词作为名字:binding, logging, messaging, printing。否则他们应该使用概念名词:accessibility, core, graphics, rpc。

一个包含支持FooBar组件功能类的package应该命名为 fooBarClasses。

--------------------------------------------------------------------------------------------------------

文件命名
对于重要的公共接口,文件命名必须跟里面的公共接口一样的名字,但对于包含的文件就不用按照这样的规则。

对于如[Style(...)]标签之类的被包括文件,命名开始用大写字母,之后用首字母大写来划分,最后以Styles来结尾:BorderStyles.as,ModalTransparencyStyles.as。

对于独立的资源,名字开头使用小写字母之后用下划线划分单词:icon_align_left.png。

--------------------------------------------------------------------------------------------------------

Namespace(命名空间)命名
开始使用小写字母之后用下划线划分单词:mx_internal,object_proxy。

--------------------------------------------------------------------------------------------------------

Interface(接口)命名
以"I"开头之后用首字母大写来区分单词: IList, IFocusManager, IUID。

--------------------------------------------------------------------------------------------------------

类命名
以首字母大写开头之后以同样规则处理接着的词汇: Button, FocusManager, UIComponent。

命名Event(事件)子类如FooBarEvent;

命名Error(错误)子类如FooBarError;

命名EffectInstance(效果实例)子类,并且子类作用于FooBar为FooBarInstance;

命名Formatter(格式化)子类如FooBarFormatter;

命名Validator(检测器)子类如FooBarValidator;

命名skinning classes皮肤外表类如FooBarBackground, FooBarBorder, FooBarSkin, FooBarIcon, FooBarIndicator, FooBarSeparator, FooBarCursor, etc。

命名utility classes(工具类)FooBarUtil (而不是FooBarUtils,包命名采用复数而类采用单数).

通常命名基类如:ComboBase, DateBase, DataGridBase, ListBase。

--------------------------------------------------------------------------------------------------------

Event(事件)命名
以首字母小写字母开头之后以单词首字母大写来区分单词:"move", "creationComplete"。

--------------------------------------------------------------------------------------------------------

Style(样式)命名
以首字母小写字母开头之后以单词首字母大写来区分单词:color, fontSize。

--------------------------------------------------------------------------------------------------------

Enumerated values for String properties
以首字母小写字母开头之后以单词首字母大写来区分单词:"auto", "filesOnly"。

--------------------------------------------------------------------------------------------------------

常量命名
全字母大写并且单词间用下划线分开: OFF, DEFAULT_WIDTH。

命名中的词必须与常量定义值中的匹配:

public static const FOO_BAR:String = "fooBar";
--------------------------------------------------------------------------------------------------------

属性(变量和getter/setter)命名
以小写字母开始以单词首字母大写来区分:i, width, numChildren.

使用i作为循环序号,n作为上限值,使用j作为循环内的循环的序号,m作为上限值。

for (var i:int = 0; i < n; i++)
{
    for (var j:int = 0; j < m; j++)
    {
        ...
    }
}使用p作为for-in循环的变量for (var p:String in o)
{
    ...
}如果一个类重写一个getter/setter并且想接着使其有效,应该在其基类对其命名前加上$作为新命名,并使用final关键字。mx_internal final function get $numChildren():int
{
    return super.numChildren;
}--------------------------------------------------------------------------------------------------------

存储变量命名
使用getter/setter,并在命名加上_foo.

--------------------------------------------------------------------------------------------------------

方法命名
以小写字母开始,之后以首字母大写来划分单词:measure(), updateDisplayList().

方法的名字应该是动词。

对于没有参数的方法一般不会命名为如:getFooBar()或者setFooBar(),应该用getter/setter替代掉。然而,如果getFoobar()是一个需要大量运算的方法,则应该命名为findFooBar(),calculateFooBar(),determineFooBar()等,而不是一个getter。

如果一个类重写一个getter/setter并且想接着使其有效,应该在其基类对其命名前加上$作为新命名并使用final关键字。

mx_internal final function $addChild(childisplayObject)isplayObject
{
    return super.addChild(child);
}

--------------------------------------------------------------------------------------------------------

事件处理命名

事件处理命名在事件类型后面加上Handler:mouseDownHandler()

如果处理的事件是由子组件发出的,在事件名字前加上字组件的名字并用下划线连接:textInput_focusInHandler()

Argument names

在每个setter中使用value作为传入参数:

推荐方式:
public function set label(value:String):void

不推荐:

public function set label(lab:String):void

public function set label(labelValue:String):void

public function set label(val:String):void

在事件处理函数中使用event作为传入参数(而不是e、evt或者eventObj)

在事件处理函数中使用event (而不是e, evt或者eventObj)作为传入参数:

protected function mouseDownHandler(event:Event):void

--------------------------------------------------------------------------------------------------------


绑定资源命名

如果绑定资源为特别的包包含了些资源,则取与包相同的名字:controls, {formatters}, validators.

--------------------------------------------------------------------------------------------------------


多种命名法则

避免使用object因为它意思含糊

item应该在作为数据单体(data item)命名中使用,而不是一个显示物体(DisplayObject)

renderer表示显示数据的显示物体

type表示是一个AS3的类型,如果不是,用kind表示.

 

posted @ 2011-10-26 22:26  Stranger  阅读(130)  评论(0编辑  收藏  举报