關於命名(naming)原則

1020請脫下褲子! 2010年12月2日下午在台北監獄你可以聽到這句很奇怪的話 :-) 因為當時阿扁到達台北監獄後獄方給他1020的受刑人編號,獄方依慣例要檢查屁股洞內有沒藏毒品! 從此,在北監“1020”取代了陳水扁。 阿這跟Flash有啥關係? 當然有關係! Flash 影片與程式內有很多情況也是使用編號, 舞台上的物件都有編號, 只是很少用到; 影格都有編號, 例如 gotoAndPlay(23); 意思是跳到整體的第 23 個影格(frame), 它可能是第二個場景的第5影格! 如果第二個場景名稱是"SceneB"(注意大小寫以及空格也不可亂寫), 則也可以寫成 gotoAndPlay(5, "SceneB"); 這樣萬一第一個場景增加或刪除影格仍可跳到正確的影格, 但是, 如果第二場景一開始多了一些影格, 則這第二句仍會跳到不是我們要的影格, 所以我們也可以給該影格取一個名稱, 例如 "開門" (有命名的影格上會有一個紅色小旗子), 然後可以寫 gotoAndPlay("開門", "SceneB"); 看到沒, 編號與命名各有好處! 在舞台上的物件可能是你直接畫的, 那無法命名, 不能從程式碼中控制, 你必須先轉為元件(Symbol), 此時元件會被放入元件庫, 原先在舞台上的則會自動被轉為該元件的一個實體(Symbol instance; 案例; 分身), 可以不必給實體名稱, 但如果你要從程式碼中控制它, 則必須給它一個實體名稱, 它會對應到程式碼中的一個變數, 這等下再來討論。 元件庫內的元件都必須有名稱, 但是因為程式碼執行時不會用到元件庫名稱, 所以你可以 使用中文給元件庫內的元件命名 雖然場景名稱與影格名稱在程式碼中也可能用到, 但因為都是被當作字串的內容, 至於圖層的名稱在程式碼中不會用到, 所以, 場景、圖層、影格的名稱都可以取中文不會有問題。

變數命名慣例(Variable naming convention)

Flash 的 ActionScript3.0 採用 Java 語言的命名慣例(naming convention), 雖然命名慣例只是個建議, 但是良好的命名原則可讓你與別的程式設計師容易溝通且不會產生誤會! 例如, 如果你遵守大家的慣例, 就不會把 gotoAndPlay 寫錯為 GotoAndPlaygotoandplay 了! 註: 微軟 C-Sharp( C# )的命名習慣不一樣! Delphi (視覺化的Pascal)命名習慣也不同! 以下是 Java 語言推薦的命名習慣, AS3 採用 Java 語言的命名習慣。 就是: (a)套件(package)名稱一律用小寫, 反應其在磁碟的目錄路徑結構; 例如 flash.events 套件實質意義上是把相關的類別放在一個目錄內 (b)類別(class)名稱的第一個字母一律用大寫字母, 例如 Cat Clock 如果有兩個英文單字組起來, 斷字處用大寫, 例如 DisplayObject (c)物件(或稱變數)名稱一律小寫開頭, 例如 myCatmyClock 又如 var cat: Cat = new Cat( ); 意思是創建一個 Cat 類別實體, 命名為 cat 如果有兩個英文單字組起來, 斷字處用大寫, 例如 MovieClipdisplayObject 請注意, displayObjectDisplayObject 第一個字母不一樣喔! (d)屬性(property, 或稱欄位)如果是可改變的(此時也可稱變數), 命名慣例與物件相同; 例如 width height 又如 var length: int = stage.width; (e)屬性如果是唯讀或說不准改變的, 那就是常數(constant), 這時習慣是全部用大寫字母, 例如, CLICK DISPLAYING 如果有兩個英文單字組起來, 斷字之處則用底線號_連接, 方便看出原英文單字; 例如 ENTER_FRAME 以及 MOUSE_CLICK 後者的全名是 flash.events.MouseEvent.MOUSE_CLICK 其實質意義就是 flash.events 這套件(目錄)內的類別 MouseEvent 裡面定義的 MOUSE_CLICK 這常數。 (f)方法(或稱函數)名稱也是一律小寫開頭, 例如 getMoney( ) 注意, 方法(函數)名稱的後面有小括號, 裡面可以有0個到很多個參數。 參數(給方稱 argument, 受方稱 parameter)顧名思義就是叫用者給被叫者參考使用的資料。 例外: 建構子(constructor)函數因規定名稱必須與類別名稱(class name)完全相同, 所以其第一個字母也是用大寫字母(除非你把類別名稱故意取小寫字母開頭!)。 關於完整的程式寫作慣例(Coding Convention)建議: 請看http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html(會另開新頁) 或是點這裡看翻譯的中文版(會另開新頁) 或是點這裡看翻譯的中文版(會換掉此頁; 按左上角可回到此頁) 或是點這裡往下跳看Java命名慣例(按左上角可回到這裡)

 Top

      

關於物件的實體名稱

      前面提到元件庫內的每個元件當然有名稱, 元件庫內可以使用中文命名不會有問題, 把元件拖到場景的舞台上會自動產生一份元件實體(symbol instances; 案例), 該實體物件可以不必命名,但是,如果希望能夠在程式碼(ActionScript)中控制該實體物件, ,就要幫該實體物件設定實體名稱,這時不可以使用中文名稱,且最好遵守大家常用的慣例(convention)! 簡單來說就是要幫這個元件實體(instance; 案例)宣告一個變數,步驟如下:

  1. 將建立好的影片片段(MovieClip)或其他元件(Symbol),拖曳到舞台上。
  2. 使用(選取工具),點選舞台上的該物件, 到『屬性面板』上實體名稱的格子填入英文字母開頭的名稱即可。
  3. 除了場景、圖層、影格的名稱可以取中文, 舞台上物件的實體名稱千萬不要取中文。
        再次提醒, 既然實體名稱對應到程式碼中的變數, 建議遵守(參考Java語言)變數命名的原則!
    請注意, 元件庫中的元件(Symbol)可以拖拉出很多個分身, 每個分身的實體名稱是各自命名。
    還有, 圖像元件的分身(實體)在舞台上是不可以命名的, 你可以先轉為影片片段元件。
設定好物件的實體名稱後,在ActionScript程式碼中就可以用該名稱來使用該元件實體了。 在定義實體名稱時雖可隨便命名,但建議在命名時加入適當的後置名稱(postfix), 例如若是影片片段(MoveClip),尾巴建議加上 _mc, 如果那是與球(ball)有關的, 就把實體名稱取為 ball_mc, 命名時若取適當結尾(suffix),不但方便我們識別, 寫程式碼的時候Flash也會自動給正確的提示(程式碼中不必再宣告, 當然也可以宣告啦)。 以剛剛拉到舞台上的 ball_mc 為例, 由於 ball_mc 物件為一個影片片段, 如果在定義實體名稱的時候有加上 _mc 為後置結尾名稱, 則在撰寫ActionScript程式碼時使用 點運算子就會自動跳出所有影片類型中可以使用的屬性及方法(函數), 使用者只需從列表中挑選你所需要的屬性或是方法(雙擊; 阿就是在你要得那項連點兩下啦)即可, 這樣不但方便而且不會打錯字(尤其是可避免自己打有時大小寫字母打錯),如下圖所示。 (如果你關閉了程式碼自動提示的功能,也可點按上方程式碼提示符號強迫給提示!)


以下是各種類型的元件,Adobe公司建議在命名時所用的後置結尾名稱:
(常用的放左邊前面)

類別 結尾名稱 類別 結尾名稱
Button _btn TextFormat _fmt
MovieClip _mc XML _xml
TextField _txt XMLSocket _xmlsocket
String _str Camera _cam
Sound _sound ContextMenu _cm
Color _color ContextMenuItem _cmi
Date _date Error _err
LoadVars _lv Microphone _mic
LocalConnection _lc PrintJob _pj
NetConnection _nc SharedObject _so
NetStream _ns Video _video
XMLNode _xmlnode    
  • 註: LoadVars 類別可以用來與網路上的伺服器(Server)互相傳送與接收資料。
  •   LocalConnection 類別可以讓同一部電腦上不同的 Flash 之間互相溝通。
  • @CopyLeft + @CopyWrong + GPL 歡迎轉載 :-)     by tsaiwn@cs.nctu.edu.tw

以下列出目前全世界公認最好的命名慣例:
Java 語言建議的命名慣例

9. 命名慣例 (Naming Conventions)

9.1 Java 命名慣例 (Java naming convention)

命名慣例讓程式更容易被理解和閱讀。
它們也可以給予關於識別子功能的資訊,例如,
一看名稱就知道是否為常數,套件,或是類別,這可以在瞭解程式碼時很有幫助。

一般建議:

  • 使用完整的、能夠望文生義的英文。
  • 使用跟該領域相關的術語。
  • 大小寫混合使用,以增加可讀性,例如 gotoAndPlay(38);
  • 名稱儘量不要超過 15 個字符(character; 字元)。
  • 不要只用大小寫的差異來辨別兩個變數名稱,這樣容易造成混淆。
項目 命名慣例 範例
Packages
套件
套件(package)名稱應該用全部小寫的ASCII字母, 而且應該是top-level 的網域名稱之一(目前有com,edu,gov,mil,net,org 或者是由1981年ISO Standard 3166所定義由兩個英文字母來代表國家的識別碼。) 為了避免和其他套件名稱衝突, 一般會將公司或組織的 nternet 網域名稱順序顛倒過來,再加上套件名稱,不用把網域名稱的每個部分都加進去,用一個或兩個就行了。
  注意 Android Java programming 規定套件名稱至少要兩個英文單字, 例如 com.google 是正確套件名稱; 還要注意, 要上傳到 Google Play(以前的Android Market)的每個APP程式的package name必須是唯一。
java.awt,
com.oracle.utility
com.google.android.v4
flash.events
flash.display
Class
類別
類別名稱應該是名詞,類別名稱可混合大小寫,但類別名稱開頭第一個字要大寫。 類別名要簡單容易描述,儘量少用縮寫或略稱,除非是URL ,HTML等廣泛使用的字。 Clock, Cake, MovieClip
Interface
介面
跟類別的命名規則完全相同,使用完整的英文,介面名稱的每個單字的第一個字母都大寫,其餘小寫。 如果可能的話,儘量使用形容詞,也就是 'able','ible' 等字尾的名稱(不是絕對必要)。 Runnable, Contactable, Clonable
Compilation unit files
檔案命名
以類別(或介面)名稱作為主檔名,附屬檔名為小寫的'.java'。 Clock.java, MouseEvent.java

Member functions
成員函數
或稱方法(Method)
函數(function, 函式)又稱方法(Method), 使用完整的英文, 最好是用動詞命名,用小寫字母開頭,如果是多個英文單字(word)連起來, 第一個單字的第一個字母小寫,其餘的單字的第一個字母大寫,就是說斷字的地方字母大寫
注意: 建構子Constructor 這函數比較特別, 其名稱以及大小寫必須與類別名稱完全相同。
openFile( ), addChild( ),
getMoney( )
Setter 成員函式 把要存取的欄位名稱前面冠上 'set'。 setFirstName(),
setLastName()
Getter 成員函式 把要存取的欄位名稱前面冠上 'get'。 getFirstName(),
getLastName()
傳回布林型態的 getter 成員函式 開頭一律冠上 'is'。 isDead, isString, isFailed

Fields/properties
欄位/屬性
所謂欄位或屬性(property, attribute)又稱 成員資料(member data), 包括變數與常數, 請參考以下變數與常數命名。
Variables
變數
變數名稱不應該以底線(_)或dollar sign($)開頭,雖然那樣還是正確但不好。 變數名稱要短且有意義, 除了臨時變數之外,要儘量避免使用一個字元的變數名稱。 若是臨時變數, 一般是用i, j, k, m, n來代表整數,x, y, z 代表實數, c, d 代表文字符號(character; 字符或稱字元)。 int age;
int myMoney;
double delta;
int i, k, n;
Parameters
參數
參數就是寫在函數名稱 之後小括號內的 變數, 原則上命名方式與變數相同; 使用完整的英文來描述傳遞的變數/物件, 可在前面冠上 'a' 或 'an',不管用哪種方式,最重要的是定好後大家就要遵守它。 customer, account 或
aCustomer, anAccount
Exceptions
異常或例外
通常以小寫字母 'e' 代表異常物件變數。 e 或 ex
Final static fields (consants)
常數
全部使用大寫英文字母,每個單字之間用底線分隔。 NUMBER_STUDENT,
MOUSE_OVER, ENTER_FRAME
Loop counters
迴圈計數器
通常以 i, j, k 或 counter 來命名。 i, j, k, cnt, counter
Local variables
區域變數
或稱局部變數
原則上區域變數使用完整的英文,第一個單字(word)的第一個字母小寫,其餘的單字的第一個字母大寫。
注意:應避免和類別的欄位名稱相同,以免產生混淆,例如,你有一個欄位名稱是 'firstName',那麼在成員函式中的區域變數就不要取相同的名稱。
totalMoney, tempSum, tmpString

註:
    區域變數(Local variable; 局部變數; 函數內的變數)的命名可以稍有彈性,
    對於比較不重要的變數,可以採取如 i, j, k, m, n, tmp 等簡短的命名方式,
    但請特別注意,不要隨意亂用,原則上仍應該儘量以完整的英文來命名。
    下表列出一些建議的臨時變數命名:
變數類型 建議的命名慣例
char 字符(字元) c 或 ch
String 字串 str 或 s 或 tmpStr
代表有幾個 n 或 k
length 長度 len
offset 位移整數 off
float 實數 f 或 x 或 y
double 實數 d 或 x 或 y
Object 物件 o 或 obj


關於完整的程式寫作慣例(Coding Convention)建議:
   請看http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html

或是點這裡看翻譯的中文版(會換掉此頁; 按左上角可回到此頁)

或是點這裡看翻譯的中文版(會另開新頁)

 Top