一、 Name命名
1. 命名长度对程序性能没有影响,尽可能使用清淅明了的单词组合,避免使用不常用的缩写或自定义的缩写。
2. ClassFile
1) UpperCamelCase.cs
2) 单词选用倾向于名词
3) ClassFileName与ClassName同名,命名规则相同。
3. InterfaceFile
1) UpperCamelCase.cs
2) 单词选用倾向于功能型形容词,多以able结尾,例:ICloneable,IDisposable,IPlayable等。
3) InterfaceFileName与InterfaceName不同的是,后者是斜体,且一定以I开头。
4) Interface命名与interface file命名同。
4. namespace_file
1) lower_case.cs
2) 单词选用倾向于类库简写 + 访问权限修饰词,如mx_internal,fl_internal等
3) Namespace的值的定义格式:http:// $yourdomain/$year/$libraryname
4) 自定义命名空间放在独立的文件中定义,且此文件中仅定义此namespace。置于d8city.core package中。
5) namespace命名与namespace file同。
5. MXML & Module & Component
1) MXML文件名及模块名/文件名及组件名/文件名:UpperCamelCase.ext
2) 单词选用倾向于名词
3) 该类文件名称与ClassFile规则相同。Componnet File本质上也是Class。
6. packageName & folderName
1) lowerCamelCase
2) 单词选用倾向于名词
3) 一般在core包中放置基本的接口,基类。
4) 一般在util包中,放置工具类
5) 一般在manager(s)包中放置管理型单例、或类单例角色类。
6) 一般在events放置自定义事件类
7) 一般在errors旋转自定义错误类。
8) 一般在asserts目录中放置所需的资源文件
9) 包名与文件夹名称对应。
7. IncludedFile UpperCamelCase.as。被include的文件,常见于Verion版本标识文件。
8. Component & Module的实例名称
1) 组件或模块的实例名称:lowerCamelCase
2) 单词选用倾向于名词
3) 以Type或Type缩写做为后缀,如borderSkin, borderSharp等。
9. ClassName
1) 类名称命名:UpperCamelCase.cs
2) 单词选用倾向于名词
3) 如果是基类,倾向于以Base结尾。
4) 如果是工具类,倾向于以Util结尾。注意用词不要与flex sdk重复。
10. Event Name
1) 文件与类名:UpperCamelCase.cs
2) 单词选用倾向于(名词 || 动词) + Event
3) Event常量定义与其值对应,例如FlexEvent.APPLICATION_COMPLETE的值为applicationComplete。
11. Error Name
1) 文件与类名:UpperCamelCase.cs
2) 单词选用倾向于(名词 || 动词) + Error
12. styleName
1) Component的style命名:lowerCamelCase 如fontSize。
13. Constant常量
1) 常量命名:全部英文大写,间以“_”分隔。如FlexEvent.APPLICATION_COMPLETE
2) 一般自定义的EventType,枚举常量定义为Constant变量。
14. 变量
1) 变量命名:“_”+ lowerCamelCase。如果变量是私有的,且无存取器,可以略去“_”。
2) 单词选用倾向于名词,或(is or has) + (形容词 || 副词)
3) 有些常用的单词,为避免与基类命名冲突,“_”有时可用“$”代替,如$width,$height。
15. setterName & getterName
1) 存取器命名:lowerCamelCase
2) 单词选用倾向于形容词,名词
3) 如果返回类型为Boolean,考虑前缀为(is || has).
16. functionName
1) 方法命名:lowerCamelCase
2) 单词选用倾向于动词,可以考虑的前缀有do
3) 一般处理事件的函数采用lowerCamelCase + Handler的格式。
4) 有些常用的单词,为避免与基类命名冲突,前面可以加“$”,如$addChild。
17. 参数
1) 参数命名:lowerCamelCase
2) 单词选用倾向于名词
18. 独立工具方法
1) 方法命名:lowerCamelCase
2) 例:flash.utils.getDefinitionByName。
二、 Encoding 文件格式
1. 所有文件以utf-8编码保存。
2. XML文件与MXML文件头如下:
<?xml version="1.0" encoding="UTF8"?> |
三、 Organization 结构组织
1. Class 组织结构,自上而下:
1) Copyright Notice (option)
2) Import namespace
a) 顺序:
1. Import flash.*;
2. Blank line
3. Import mx.*;
4. Blank file
5. Import thirdPackage.*;
6. Blank file
7. Import selfProject.*;
b) 注意:
1. 如果使用Flex Builder IDE,输入某类名称,当按下“CTRL+/“时,Flex会自动添加import引用。flex自动添加的顺序与上面顺序相同。
2. 如果仅需要mx.core.fl_internal,就不要引用mx.core.*;
3) Use namespace
use namespace object_proxy; |
4) Metadata
a) 顺序
1. Event
2. Style
3. Effect
5) [Bindable] or [Bindable(event=”eventType”)]
a) 如果变量、类、或存取器有[Bindable],且有注释。[Bindable]置于注释上方。例:
[ArrayElementType("kjml.core.IPage")] private var _pages : Array = []; |
6) Class Comment
7) Class Definition
public class ClassName extends UIComponent implements IAutomationObject, IChildList |
8) include “../folder/Some.as”;
9) Static Variables(or Class Variables) 类变量
a) 顺序 public => internal => protected => private =>selfNamespace
10) Static Setters & Getters
a) 顺序 public => internal => protected => private =>selfNamespace
11) Static Functions
a) 顺序 public => internal => protected => private =>selfNamespace
12) Constructor
13) Instance Variables 实例变量
a) 顺序 public => internal => protected => private =>selfNamespace
14) Setters & Getters
a) 顺序 public => internal => protected => private =>selfNamespace
b) 注:不要在存取器中抛出异常
15) Functions
a) 顺序 public => internal => protected => private =>selfNamespace
16) 示例: 参与Flex SDK.
2. Interface 接口
1) Initial Comment
2) Interface IUpperCamelName extends IOtherInterface […]
3) Interface Body.
3. MXML
1) 文件头
2) Root Component定义
3) Metadata 顺序与Class同
4) Style File
5) Script Code 规则、顺序与Class同
6) State、Effect等非可视对象定义
7) Visual Components定义。
四、 常用缩写
缩写 | For | eg |
auto | automatic | autoLayout |
eval | evaluate | evalBindingResponder |
impl | implementation | DragManagrImpl |
num | number | numChildren |
min | mininum | minWidth |
max | maxinum | maxWidth |
nav | Navigation | navBar |
reg | RegExp | regEmail |
util | Utility | StringUtil,ArrayUtil… |
五、 Code Style 编码风格
1. 类型声明
1) 尽可能使用强类型声明。
2) 定义变量,存取器,方法一定要声明类型。类型*胜于不声明。更细致的类型胜于*或者Object。
3) Array变量声明, 建议声明它的元素类型
a) 声明一个类变量或实例变量:
[ArrayElementType("kjml.core.IPage")] private var _pages : Array = []; |
b) 如果上述方法不方便使用,比如在函数中,也可以按如下方法声明:
Example 1:
private var _pages : Array = []; |
Example 2:
private functionName(arr : Array ) : Array { // } |
Example 3:
var arr : Array = []; var arr : Array = [ 1, 2, 3 ] var arr : Array =new Array(); var arr : Array =new Array(1, 2, 3); |
4) 颜色变量声明为大写字母组合,如0xFFFF88,不要使用0xffff88。并且不要使用0x0或者0x000代替0x000000。
5) 组件的属性,如alpha,类型为Number,不要用1代替1.0,不要用0代替0.0。
6) 字符串定义,使用双引号,而非单引号。
7) 关于Object类型的定义
Example:
var obj : Object = {}; var obj : Object = { a: 1, b: 2, c: 3 }; var obj : Object = new Object(); var o : Object = new Object(); o.a = 1; o.b = 2; o.c = 3; var o : Object = {}; o.a = 1; o.b = 2; o.c = 3; |
8) 正则表达式的声明
var pattern:RegExp = //d+/g; var pattern:RegExp = new RegExp("//d+", "g"); |
9) XML与XMLList的定义
var node:XML = <name first="Jane" last="Doe"/>; 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'/>; |
10) 使用new关键字,不省略()。
11) 在一句语法结束时,不省略“;”。
12) 关于for,不要省略括号
for (var i:int = 0; i < 3; i++) { doSomething(i); } for (var i:int = 0; i < 3; i++) doSomething(i); |
13) 关于override关键字,把override放在前面
override protected method measure():void protected override method measure():void |
14) 关于构造器中的参数
public function MyClass(foo:int, bar:int) { this.foo = foo; this.bar = bar; } public function MyClass(fooVal:int, barVal:int) { foo = fooVal; bar = barVal; } |
15) 待续
六、 KeyWords 系统保留的关键字与操作符
as break case catch class const continue default delete do else extends false finally for function if implements import in instanceof interface internal is native new null package private protected public return super switch this throw to true try typeof use var void while with each get set namespace include dynamic final native override static abstract boolean byte cast char debugger double enum export float goto intrinsic long prototype short synchronized throws to transient type virtual volatile |