本節(jié)內(nèi)容概述了在使用actionscript編程和創(chuàng)建應(yīng)用程序的時(shí)候需要遵循的一些規(guī)則,以及如何使我們的程序代碼更有效和具有更好的可讀性,更方便調(diào)試應(yīng)用程序。 把這節(jié)寫在前面,也是為了讓開(kāi)始接觸ActionScript編程的開(kāi)發(fā)人員從一開(kāi)始就養(yǎng)成好的編程和開(kāi)發(fā)習(xí)慣。
1. 遵循命名規(guī)則
一個(gè)應(yīng)用程序的命名規(guī)劃必須保持一致性和可讀性。任何一個(gè)實(shí)體的主要功能或用途必須能夠根據(jù)命名明顯的看出來(lái)。因?yàn)锳ctionScript是一個(gè)動(dòng)態(tài)類型的語(yǔ)言,命名最好是包含有代表對(duì)象類型的后綴。一般而言,名詞_動(dòng)詞和形容詞_名詞之類的語(yǔ)法是最常用的命名方式,如: 影片名字:my_movie.swf URL實(shí)體:course_list_output 組件或?qū)ο竺Q:chat_mc 變量或?qū)傩裕簎serName
方法和變量的名稱應(yīng)該以小寫字母開(kāi)頭,對(duì)象和對(duì)象的構(gòu)造方法應(yīng)該大寫。命名變量的時(shí)候使用大小寫混和的方式,并且使用字母打頭,還可以包含數(shù)字和下劃線。 下面的一些命名是非法的:
_count =5 ;//首字符不能使用下劃線 5count = 0;//首字符不能使用數(shù)字 foo/bar = true;//包含非法字符
另外,ActionScript使用的保留字不能用來(lái)命名變量。 ActionScript是基于ECMAScript,所以我們可以根據(jù)ECMAScript的規(guī)范來(lái)命名。如, course_list_output = "foo"; //全部小寫,使用下劃線分割字串 courseListOutput = "foo"; // 大小寫混和的方式 BASEURL = http://www.foo.com; // 常量使用全部大寫 MAXCOUNTLIMIT = 10; MyObject = function(){ }; // 構(gòu)造函數(shù) f = new MyObject(); // 對(duì)象 注意;良好的命名規(guī)范還可以使用Flash的代碼提示功能。
2. 給你的代碼添加注釋
使用代碼注釋能夠使得程序更清晰,也便于我們閱讀。Flash支持的代碼注釋方法有兩種:
單行注釋,通常用于變量的說(shuō)明 var clicks = 0; // variable for number of button clicks 多行注釋,通常用于功能說(shuō)明和大段文字的注釋: /* Initialize the clicks variable that keeps track of the number of times the button has been clicked. */
一些具有特定意思的注釋方法:
// :TODO: topic 表明一個(gè)主題的開(kāi)始 // :BUG: [bugid] topic 顯示了一個(gè)BUG所在 // :KLUDGE: 表明下面的代碼并不完善,可能存在問(wèn)題 // :TRICKY: 告訴開(kāi)發(fā)人員下面的代碼具有相互作用,修改之前請(qǐng)謹(jǐn)慎
3. 保持代碼的整體性
無(wú)論什么情況,應(yīng)該盡可能保證所有代碼在同一個(gè)位置,這樣使得代碼更容易搜索和調(diào)試。我們?cè)谡{(diào)試程序的時(shí)候很大的困難就是定位代碼,如果大部分代碼都集中在同一幀,問(wèn)題就比較好解決了。通常,我們把代碼都放在第一幀中,并且單獨(dú)放在最頂層。如果在第一幀中集中了大量的代碼,記得用注釋標(biāo)記區(qū)分,并在開(kāi)頭加上代碼說(shuō)明。
//=========================================== // 視頻語(yǔ)音聊天系統(tǒng) // FCAVPresence組件 // Copyright ◎2002 Macromedia, Inc. All rights reserved. // 完 善: Liu21st, Liu21st@126.com //---------------------------------------------------------
在獨(dú)立的功能模塊前面加上類似的標(biāo)注: //=========================================== // 參數(shù)初始化 //---------------------------------------------------------
4. 初始化應(yīng)用程序
記得一定要初始化你的應(yīng)用程序,init函數(shù)應(yīng)該是你的應(yīng)用程序類的第一個(gè)函數(shù),如果使用面向?qū)ο蟮木幊谭绞絼t應(yīng)該在構(gòu)造函數(shù)中進(jìn)線初始化工作。該函數(shù)只是對(duì)應(yīng)用程序中的變量和對(duì)象初始化,其它的調(diào)用可以通過(guò)事件驅(qū)動(dòng)。 下面的例子可以說(shuō)明如何進(jìn)線初始化
function FCAVPresenceClass() { this.init(); } FCAVPresenceClass.prototype.init = function() { this.name = (this._name == null ? "_DEFAULT_" : this._name); this.prefix = "FCAVPresence." + this.name + "."; };
5.使用局部變量
所有的局部變量使用關(guān)鍵字var來(lái)申明,這樣可以避免被全局變量訪問(wèn),更重要的是,可以保證變量不被覆蓋和混淆程序邏輯。例如,下面的代碼沒(méi)有使用var來(lái)申明,覆蓋了其它變量。
counter = 7; function loopTest() { trace(counter); for(counter = 0; counter < 5; counter++) { trace(counter); } } trace(counter); loopTest(); trace(counter);
輸出結(jié)果為: 7 7 0 1 2 3 4 5
6. 創(chuàng)建對(duì)象時(shí)使用原型添加方法和屬性
當(dāng)我們創(chuàng)建一個(gè)對(duì)象的時(shí)候,應(yīng)當(dāng)使用原型方式來(lái)添加對(duì)象的方法或?qū)傩,使得該方法或(qū)傩阅軌虮凰性搶?duì)象或子對(duì)象的實(shí)體所訪問(wèn)。這種能夠確保內(nèi)存中每個(gè)函數(shù)只有一份拷貝。作為一般的規(guī)則,不要在構(gòu)造函數(shù)中定義方法。下面是一個(gè)正確的例子:
// Best practice for creating an object MyObject = function() { } MyObject.prototype.name = ""; MyObject.prototype.setName = function(name) { this.name = name; } MyObject.prototype.getName = function() { return this.name; }
下面這段代碼是不可取的:
// Less desirable practice for creating an object MyObject = function() { this.name = ""; this.setName = function(name) { this.name = name; } this.getName = function() { return this.name; } }
使用上面的方式在每個(gè)對(duì)象的實(shí)體被創(chuàng)建的時(shí)候都會(huì)實(shí)體重新復(fù)制每一個(gè)屬性和方法,會(huì)加重系統(tǒng)的內(nèi)存開(kāi)銷。
7. 規(guī)范命名方式獲取代碼提示功能
這方面我已經(jīng)有過(guò)詳細(xì)的敘述,請(qǐng)看: [ actionscript代碼提示功能 ]和 [ 面向?qū)ο蠓绞降拇a提示功能 ]
出處:
責(zé)任編輯:qhwa
◎進(jìn)入論壇Flash專欄版塊參加討論
|