天天看點

flex+AS3程式設計規範

flex+AS3程式設計規範

Flex+AS3編碼規範

http://www.cnblogs.com/jiahuafu/

1.  縮寫:

盡量避免使用縮寫,使用縮寫時盡量和Flex保持一緻。但要記住一些通用縮寫,如:acc(accessiblility) , auto(automatic), impl(implementation), info(infomation), num(number), min(minimum), max(maximum), nav(navigation), regexp(regularexpression), util(utility)等等。

2.  檔案名:

MXML:各個單詞首字母大寫,如Main.mxml,FlvPlayer.mxml

CSS:小寫字母開頭,其餘大寫,如testStyle.css

3.類名:各個單詞的首字母大寫,如EditTest.as

        事件類(FoobarEvent.as)

        指令類:TestCommand.as

        皮膚類(FooBarBackground, FooBarBorder, FooBarIcon...),

 utility類(FooBarUtil,不是FooBarUtils,包是複數,類是單數);

4. 包:

l  小寫字母開頭,後面各個單詞大寫,比如controls, listClasses;包名稱最好是名詞或者動名詞,不要用動詞、介詞、形容詞、副詞之類。當一個包的作用是實作某一功能的時候最好使用動名詞,如bingding, logging, messaging, printing;支援元件FooBar的最好寫作fooBarClasses;

l  包的導入:使用完整的應用名,不要使用星号(*),除非使用了包的絕大          部分

l  包的第一部分使用頂級域(com,org,mil,edu,net,gov等)下一部分是所有者的名稱,再是工程名和子產品,如:cn.com.company.project.module

5.命名空間:

   小寫字母、下劃線隔開,檔案名必須與命名空間名稱一緻,如:mx_internal, object_proxy

   6. 接口名稱:

      字母“I”開始、大寫字母間隔:IList, IFocusManager, IUID

7.常量:

    全部大寫字母,下劃線間隔:OFF, DEFAULT_WIDTH,如果常量是一個字元串,那麼常量命名和常量值保持一緻: <public static const FOO_BAR: String = "fooBar">

8.變量名:

l  全局變量以g_ + 類型縮寫開頭,并使用有意義的名稱,如g_intCount,g_numCount,g_strName, Boolean的以is開頭。

l  私有變量使用 下劃線+變量名,如_id,同時生成一個get 方法

public functon get Id():int{ return _id;}

l  臨時變量通常使用一個常用字母,如:i,j,k,m,n。不要使用l(L)避免與1混淆

l  Catch中的變量必須使用e

l  變量盡量初始化

9. 方法命名:

小寫字母開始,每個單詞大寫字母間隔,應該使用動詞:measure(), updateDisplayList();無參方法應該實作為getter/setter,而不應該是getFooBar(), setFooBar();當然,如果getFooBar()是一個需要大量計算的慢速度方法的話就應該命名為findFooBar(), calculateFooBar(), determineFooBar()等等,而不是getter;如果子類的某方法覆寫了基類的某方法,但是同時又想繼續公開基類的某方法,那麼這個時候應将基類的方法名前加上“$”作為子類方法名,并且子類的方法名應該标志為final,且除了調用基類方法外不應該做其它的事情:

mx_internal final function $addChild(child:DisplayObject):DisplayObject

{

   return super.addChild(child);

}

10. 事件處理器命名:

   在後面加上Handler:mouseDownHandler();如果事件處理器是用來處理元件的某一個子元件的事件的話,那麼就應該把子元件的名稱加到最前面,并且用下劃線隔開:textinput_focusInHandler() (textinput的focusin事件的handler);

11.參數命名:

setter值使用value:public function set label(value:String):void;事件參數使用event:protected function mouseDownHandler(event:Event):void

12.屬性名命名:

小寫字母開始,大寫字母間隔:i, width, numChildren;

使用i作為選還變量,n作為循環上界;使用j作為循環變量,m作為循環上界:

var n:int = list.length;

for (var i:int = 0; i < n; i++)

   for (var j:int = 0; j < m; j++)

   {

       ...

   }

使用p作為loop循環的變量:

for (var p:String in o)

   ...

如果子類的getter/setter覆寫了基類的getter/setter,但是同時又想繼續公開基類的getter/setter,那麼這個時候應将基類的屬性名前加上“$”作為子類屬性名,并且子類的屬性名應該标志為final,且除了調用基類getter/setter外不應該做其它的事情:

mx_internal final function get $numChildren():int

   return super.numChildren;

13.存儲變量命名:

getter/setter屬性foo所存儲的變量應該是_foo(加上下劃線)

14.控件ID:以控件類型縮寫開頭,如按鈕類型的:btnSend,圖檔的:imgFeng等等。每個控件隻要有id則id放在第一位,如<mx:HTML id="htmlBaidu"。

15.聲明:

每行一個申明,分号結束,變量的申明放在開始位置,循環内部變量除外。

16.行、換行、縮進、空格

   每行不要操過110個字元,即不要操過可視化的部分,在逗号之後,運算符之前,較進階别代碼處換行, 在後面的行縮進二個制表符(按兩次Tab鍵)

  同一父元件之間的子元件之間插入空白行,下一級元件與上一級元件縮進一個制表符

   函數之間插入空白行,局部變量和申明之間換行,一段代碼的邏輯之間換行,單行注釋或特殊的多行注釋之前換行

   關鍵字與小括号之間空格,方法的形參逗号後面加空格,操作數之間插入空格(一進制操作符之間不要加入),方法名與括号之間、對象名和類型間不插空格。

使用三元操作符要用空格隔開,必要時可以拆分成多行

17.注釋

 盡量為每個變量、類、函數、參數等編寫注釋

一般每個文檔前面都需要寫注釋,内容包括主要功能,作者,日期等等,

/***********************

*作者:    jiangjingsong

*日期:    2008-10-31

*功能:   

*修改記錄:

************************/

函數注釋示例:

*函數名:  ChangeName

*作者:    007

*功能:    改變名稱

*參數:ID :名稱id

*             name:修該的名稱

*傳回值:  類型(boolean)

*          傳回true表示修改成功

*          傳回false表示修改失敗

如果這個函數所在的文檔有注釋的話,則公用的部分可以可以不寫,當然并不是每個函數都需這麼寫注釋,根據具體情況而定。

變量注釋:

Var  intCount:int=0 //計數器的值

18. 表達式相關:

   對于通用的操作符(+, -, *, /, &&, ||, <, <=, >, >=, ==, !=)不要使用不必要的圓括号;其它的優先級不容易記住的可以借助圓括号。

19. 強制類型轉換:

   不要将Boolean變量和true或false比較;顯式的将int,uint, Number, String轉換為Boolean值,使用if(n !=0 )而不是if (n),使用if (s != null && s != “”)而不是if (s),對于對象引用來說可以隐式轉換為Boolean值,使用if (child)而不是if (child != null),使用if (!child)而不是if (child != null);使用強制類型轉換而不是as操作符,僅僅當強制轉換可能失敗并且你希望失敗的時候值為null而不是抛出異常。使用IUIComponent(child).document而不是(child as UIComponnet).document;

20. 比較:以更容易了解的方式書寫比較表達式: if (n == 3) // "if n is 3"(Yes),if (3 == n) // "if 3 is n"(No);

21. ++和–操作:字首形式和字尾形式效果一樣的時候使用字尾形式,隻有當你想在變量在操作之前使用的時候才使用字首形式;

22. 三元操作符:可以使用三元操作符代替簡單的if/else邏輯,尤其是對null進行判斷的時候;

return item ? item.label : null (Yes)

if (! Item)

return null;

return item.label; (No)

但是不要使用嵌套的三元操作符;

23. new:即使構造的類不帶參數也要使用圓括号:var b:Button = new Button();(yes)var b:Button = new Button;(No); 

24. include:使用include而不是已廢棄的#include,和前面一樣,每個聲明語句以分号結束;使用相對路徑而不是絕對路徑;

25. use namespace:避免使用,非公開名字空間引用使用“::”:

Yes:

import mx.core.mx_internal;

// Later, in some method...

mx_internal::doSomething();

No:

use namespace mx_internal;

doSomething();

26. if:當if/else分支隻有一句聲明的時候,要寫上else;

if (flag)

doThing1();

――――――――――――――――――――――――――――――――――――

Yes:

if (flag){

   doThing1();

else{

doThing2()}

――――――――――――――――――――――――――――――――――

27.保留字、關鍵字

l  undefined盡量避免使用;

l  int和uint:整數後面不要加小數點,十六進制用0x開始,後面的字母大寫;

l  RGB色通常用六個十六進制數字表示;

l  索引值-1表示“沒有索引項”;

l  Number:通常表示可以帶小數,是以即使變量是整數也應該加上一個小數點和一個零,比如alphaFrom = 0.0; alphaTo = 1.0;但是螢幕坐标值不要這樣做;

l  指數計數的時候使用e,比如1.0e12,不要用大寫E;

l  String:使用雙引号界定字元,即使字元中間包含引号:字元what’up, “Big Boy”?表示為"What's up, \"Big Boy\"?",而不是’what\’s up “Big Boy”?’;

l  Array:使用“[]”,而不是new Array(),比如[1, 2, 3]而不是new Array(1, 2, 3);這裡在一個數組變量的時候容易出問題,比如一個包含一個值3的數組,如果用new Array(3),那麼表示的是建立了一個三個元素的數組[undefined, undefined, undefined],而不是[3];

l  Object:使用{},而不是new Object();比如{}, {a: 1, b: 2, c: 3};

l  Function:避免使用匿名函數,用類方法或者包方法代替;如果一定要用,那麼聲明傳回值,并且函數體内最後一個語句用分号結尾:function(i:int):void { doIt(i - 1); doIt(i + 1); }

l  RegExp:不要使用正規表達式構造函數建立正規表達式,使用var pattern:RegExp = /\d+/g;而不是var pattern:RegExp = new RegExp("\\d+", "g");

l  XML和XMLList:直接使用保留字聲明,不要使用構造函數。使用var node:XML = <name first="Jane" last="Doe"/>;而不是var node:XML = new XML("<name first=\"Jane\" last=\"Doe\"/>"); XML屬性值要使用雙引号括起來,不要使用單引号。

l  Class:隻有當需要在區分兩個導入類的時候才使用類的全名,

正确做法(Yes:):

import mx.controls.Button;

...

var b:Button = new Button();

錯誤做法(No:):

var b:Button = new mx.controls.Button();

正确做法:

import my.controls.Button;