從ActionScript3編程書籍中的ENTER_FRAME說起
學習一門技術,比較系統的途徑仍然是書籍。然而教程書籍有時提供的范例并沒有推薦良好的編程習慣,使讀者走了不少的彎路。7yue這篇博文便是就ActionScript3編程書籍的一些常見情況來描述這一問題。
現在開始接觸ActionScript3編程的愛好者越來越多,他們可以選擇從不同的角度來學習ActionScript3編程:書籍,教程,博客,開放源碼項目等等。我最近發現一個有趣的現象,就是AS3的部分教程中都存在一個小問題,就是當面向初學者提供某些范例和教程時,這些內容并未從良好的編程經驗或者是習慣入手,而是寄期望于日后的學習中,再了解更好的,更加值得使用的方法,我在想,為什么很多教程或文章不能一開始就提供***實踐相關的內容給愛好者呢?這樣,既提高了學習的效率,也減少了學習的彎路。
比如,下列的一小段代碼出自某本O'Reilly的書籍
書中這段代碼目的是讓開發者了解AS3在SWF中的處理優先級是大于可視化效果的,于是,就先用這樣的一段代碼來說明:
- for (var i:int = 0; i<50; i++){
- myClip.x+=2;
- }
這段代碼為了說明在循環中,MC的位置根本就不會按照for循環一樣,呈現x坐標的遞加,而是直接跳轉到***循環結束時x坐標的位置上去,這其實沒什么問題,但是下面的代碼,則是說,開發者可以使用Event.ENTER_FRAME事件來觸發一個偵聽函數,在偵聽函數中處理一個MC的移動。
- myClip.addEventListener(Event.ENTER_FRAME,slideClip);
- function slideClip(evt:Event):void{
- if (myClip.x <100){
- myClip.x += 2;
- } else {
- myClip.removeEventListener(Event.ENTER_FRAME,slideClip);
- }
- }
開發者在學習這段代碼的時候,尤其是初學者,就對Event.ENTER_FRAME有了深刻的印象,于是乎,隨著他的學習曲線,以后對于AS3中對于MC的動態處理,他們自然而然的就會不斷的用到ENTER_FRAME,甚至于不斷的將各種處理機制都放入其中。結果顯而易見,大量的應用性能和靈活性問題隨之而來,或許在若干長的時間過后,才聽到有講座說,ENTER_FRAME是一個不推薦的編程方式,更推薦大家用Timer云云之類的說法。
這些類似的教程內容本身沒有什么錯,為了演示一個功能或特點,使用了最容易實現的方法來說明問題,如果這是一個售前工程師的工作,那么這種方式是***的,如果是面向讀者和學習的人,這種方法是粗心的,不考慮學習成本和效率的,因為它直接導致了開發者的常用編程方式,直到開發者積累了一定的經驗,抑或是付出了一定的代價之后,才會發現有更好的方式,更加的性能來實現同樣的結果。所以,如果寫書或者是教程,我覺的更好的一點是多考慮一下學習者的成本和曲線,不要為了達到目的,而讓學習者獲取了一個實際并不可取的方法。
記得以前我就發現過這樣的問題,在MSDN上,存在著大量的代碼和范例,結果用到后來,才發現是不好的和有很大代價的內容,我就在想,為啥不能在我學習的時候就告訴我一個更好的方法呢?
【編輯推薦】