Flex3 & AS3.0 Coding Guidelines

一、      Name命名

1.         命名长度对程序性能没有影响,尽可能使用清淅明了的单词组合,避免使用不常用的缩写或自定义的缩写。

2.         ClassFile

1)        UpperCamelCase.cs

2)        单词选用倾向于名词

3)        ClassFileNameClassName同名,命名规则相同。

3.         InterfaceFile  

1)        UpperCamelCase.cs

2)        单词选用倾向于功能型形容词,多以able结尾,例:ICloneableIDisposableIPlayable等。

3)        InterfaceFileNameInterfaceName不同的是,后者是斜体,且一定以I开头。

4)        Interface命名与interface file命名同。

4.         namespace_file      

1)        lower_case.cs

2)        单词选用倾向于类库简写 + 访问权限修饰词,如mx_internalfl_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)        TypeType缩写做为后缀,如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)        Componentstyle命名: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)

 

/*

Project Name

Copyright © 2008 Company or Team All Right Reserved.

*/

 

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

 

/**

 *  The UIComponent class is the base class for all visual components,

 *  both interactive and noninteractive.

 *

*  <p>The UIComponent class is not used as an MXML tag,

*  but is used as abaseclass for other classes.</p>

*

*  <pre>

*  &lt;mx:<i>tagname</i>

*   <b>Properties </b>

*   automationName="null"…组件属性说明

*  </pre>

*

*  @includeExample folder/someExample.mxml(使用举例)

*

*  @see mx.core.IUIComponent(相关类、接口文件)

*/

 

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)        StateEffect等非可视对象定义

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 /* of kjml.core.IPage */ = [];

Example 2:

private functionName(arr : Array /* of Number */) : Array /* of String */

{

   //

}

 

                            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)        XMLXMLList的定义

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

你可能感兴趣的:(object,Flex,Class,import,interface,variables)