初學AS的入門指南

來源:互聯網
上載者:User
初學 一、什麼是AcionScript?

隨手翻開一本技術類書籍,第一章第一節多半以“What's xxxx”做標題,要學習學一樣技術,當然最先要弄清它是什麼。用最簡單的一句話定義:AS是一種指令碼語言。這句話裡有兩個關鍵詞:

1.語言:所有的電腦語言都是相通的(包括組合語言、中級語言、進階語言),這意味著如果你曾經系統的學習過其他的某種電腦語言,那麼AS入門將變得非常容易。

2.指令碼:這說明AS是一種解釋型語言(或稱為指令碼語言)。它具備瞭解釋型語言的優點:快速開發,動態性,學習門檻低等等,同時它也繼承了相應的缺點:最主要的兩個缺點是效率低下和原始碼外露。這也是讓當今Flash開發人員極為頭痛的兩個問題,效率低下,意味著Flash無法有效完成一些複雜的演算法(就拿遞迴來說,Flash中僅允許256層深度的遞迴)。而原始碼外露,則讓Flash作者的著作權無法得到有效保護,國內外很多著名的反編譯軟體都可以讓Flash中的程式碼無處遁形。儘管如此,畢竟瑕不掩瑜,Flash AS仍然是一種簡單易用,功能強大的指令碼語言,高超的AS編程技巧+良好的美工+優秀的創意可以打造出許許多多令人瞠目結舌的作品:絢麗的特效,趣味性極強的的遊戲,功能強大的網路應用程式....然而,這一切都是要從最基礎到如變數、函數開始(當然,如果你有編程基礎那就另當別論),在宏偉的大廈也是一磚一瓦建設起來的,不是嗎?


二、解釋型?編譯型?跨平台?

可能有朋友注意到,剛才談到Flash的原始碼外露的問題時,有這樣一句話“很多著名的反編譯軟體....”,即曰“解釋”,又何以“反編譯”?並非是我出爾反爾,Flash AS的的確確是通過解釋執行的,而用來解釋+執行的工具,就是大名鼎鼎、擁有98%瀏覽器佔有率的Flash Player。然而,在你把來源程式放心交給Flash Player去執行之前,必須要經過一個“編譯”的過程,它將原始碼轉換成一種可以被FP識別的標籤(tag)。而這些標籤被以ZIP方式壓縮儲存在.swf格式的檔案中。當然,一個.swf檔案中除了包含AS,還有圖形、聲音等資源。在“解釋”之前先進行“編譯”並非是多此一舉,編譯的好處主要有三個:

1.經過編譯後的原始碼,以標籤(稱為“目標代碼”)的形式存在,更容易被Flash Player識別,因而可以提高解釋速度。

2.編譯過程可以預先檢測程式中的語法錯誤,並給出適當的錯誤資訊,方便調試。

3.編譯過程也是代碼壓縮的過程,編譯後的代碼更加精簡。

這麼說來,把AS稱為一種純粹的解釋型語言就有失妥當了,我們可以把它歸類為一種“混合型”語言。混合型語言的特點是,原始碼先經過編譯,產生一種“中間代碼”,在由相應的平台(Flash Player)去解釋執行中間代碼。混合型語言中的佼佼者當屬現在同樣火熱的Java語言:Java語言的原始碼(.java)經過編譯,得到位元組碼(.class),在由平台(JVM)去解釋執行位元組碼。不幸的是,混合型語言的這種這種“編譯”過程通常是可逆的,無論是java還是flash,都可以根據其中間代碼,反編譯得到原始碼。而且,反編譯swf的難度要遠遠低於class,而在編譯過程中加密要複雜的多,這也就是為什麼如今flash反編譯軟體橫行的原因。
Flash Player的另一個優勢是提供了跨平台性,無論何種平台,只要擁有內嵌Flash Player的瀏覽器或是獨立的Flash Player播放器,就可以欣賞Flash,而swf檔案本身不需要任何的改變,不同的只是Flash Player在各個平台的實現方式而已。這一點也是它能夠廣泛應用於互連網的原因之一。可能有的朋友想到Flash的另一種播放方式,即Projector方式,通常我們所見到的是一個.exe檔案。然而需要注意的是,以Projector方式發布的Flash,是不具備跨平台能力的。只要明白了Projector的原理,就可以很容易理解這一點,其實Projector僅僅是簡單的將一個獨立的Flash Player播放器和swf檔案整合,前面提到,不同平台的Flash Player實現不同,因此,被整合到Projector中的swf無法使用不同的Flash Player播放,自然也就失去了其跨平台性。Projector真正的好處在於,可以讓原本沒有Flash Player的機器,在不安裝FP的情況下,瀏覽Flash。其效果大致相當於你去買DVD光碟,但是你沒有DVD機,因此賣光碟的小販免費送了你一台DVD機一樣。當然,現實中不可能有這樣的好事。

三、學習AS需要不需要有編程基礎?如果需要,該去學習那種語言?

這是一個經常聽到的問題。我前面曾經提到,如果你有著其他語言的編程基礎,學習AS將變成一件非常容易的事。但如果沒有呢?是不是會很困難?答案是否定的。總的來說,AS是一種相對比較簡單的語言,甚至你可以用它來作為你進入編程世界的第一步。如果你有著c/java/js的編程經驗,你將會發現AS只是你曾經學習並掌握的知識的一個子集,你面對的僅僅是不同的API,僅此而已。然而,如果你的目的只是為了學習AS,那你完全沒有必要為了它先去學習其他任何一種語言,這就像你為了弄明白1+1=2,而費盡九牛二虎之力去研究2+2=4一樣,本末倒置。你現在所要做的,就是從最基礎開始。何謂基礎?變數、資料類型、運算子等等都算是基礎,學了一段時間編程卻仍然搞不清楚i++與++i的區別的人不在少數。不要小看它們,對基礎概念掌握的不牢固,可能會為你將來的編程經曆造成重大的困擾,正所謂千裡之堤,潰於蟻穴。在這個時候,你可能需要一本書來協助你,筆者極力推薦下面這本書:

看到他的封面,你就知道這本書是由鼎鼎大名的O'reilly公司出版。如今,O'reilly公司的出版物儼然已成為電腦技術圖書的標準,看到了O'reilly的標誌,就等於看到了品質的保證。
這本書可以說是Flash ActionScript的絕佳入門書籍,書中系統地闡述了AS中所有的基礎內容,包括:變數,資料與資料類型,未經處理資料類型,運算子,語句,條件陳述式,迴圈控制語句,函數,事件與事件處理,數組,對象與類等等。
先不要被這一大堆內容嚇倒,聰明的你應該很容易理解它們,學習的目的在於運用。因此,對你來說最重要的是按照書中的例子重新做一遍,以加深理解,最好能夠修改那些例子,並對出現的錯誤加以分析。這樣,你將會發現自己的進步速度之快甚至超過了自己的想象,儘管你現在還不能做出什麼像摸象樣的東西,但是,這將為你今後的成就奠定堅實的基礎。有的朋友總是不重視這樣的基礎訓練,認為創意、思想最為重要,誠然,我不否認創意在我們工作中的重要性,但好的創意,也是需要基礎來實現的,否則,你充其量只能做個空想家罷了。

四、免費的就是最好的?

下午文章剛一發表,就收到Flash Coders群裡的朋友們的意見,認為我所推薦的書籍《ActionScript權威指南》對於初學者來說,難度有些大了。的確,也許這本書並不完全適合於沒有任何編程基礎的初學者,我所以推薦這本書的主要原因是,它的講解足夠系統化,按部就班,而且充分利用代碼把很多容易混淆的概念分析的比較透徹,令人印象深刻。就像《Thinking in Java》,我從不認為這本書適合於Java初學者閱讀(時至今日,儘管我自認為已經不算是Java初學者,但書中的很多內容我仍然沒有能完全消化掉),但每當有人問我有哪些優秀的Java書籍時,我總是第一個想到它。所以,我們或許可以把《ActionScript權威指南》當作一本複習手冊,當你對AS有了一個整體的印象之後,再捧起這本書,你也許會發現許多以往學習中的漏洞,或是一直盤繞在你心頭的疑惑驟然解開。然而,究竟由誰來給你這個“整體的印象”?更為淺顯的書籍?入門培訓課程?在這裡我要說的是“免費的就是最好的”,雖然這句話不適用於每一個角落,但在這裡,Flash隨帶軟體附贈的協助系統絕對可以勝任入門師傅這個角色。很多人小看了軟體的協助系統,認為它們只不過是教你如何安裝,如何卸載,這真是一個天大的誤會,尤其當你使用的是某種語言的IDE時,這個誤會就更加誇張了。僅僅以Flash的協助系統來說,已經可以稱得上是一本Bible。初學者可以從中解決幾乎所有的問題。“協助”的英文是Help,“救命”的英文也是Help,所以,如果你有在論壇發帖喊“救命”的時間,不如去抓住身邊這額棵救命稻草。更何況,論壇的文章可能三天也沒有人回複,而協助系統則是隨叫隨到。
接下來的問題是,如何更好的使用協助?按照筆者的意見,一個完善協助系統主要有兩個職能:
1.入門指導。
2.工具書。

Flash的協助系統很好的完成了這些工作。以Flash MX 2004的協助系統為例,整個系統分成五個部分:Getting started with Flash,Using Flash,ActionScript Reference Guide,ActionScript Dictionary,Using Components,前兩部分基本上與ActionScript無關,這裡不與考慮。後三部分中,第三和第五部分便是最好的入門指導,第四部分則是一部完整的AS字典,可以隨時查閱。對於Flash初學者來說,可以先忽略掉組件(Components)的部分,下面讓我們來看看ActionScript Reference Guide:第一章講了一些廢話,第二章也不是為初學者設計,它概述了Flash MX到2004在AS方面的變化,有興趣的朋友可以看一下我的“2004新特性執行個體教程”。地址: http://www.flashempire.com/school/tutor.php?author=jinni 而接下來的第三章:Flash基礎,則是重中之重了。它從最基本的文法講起,先後涉及了資料類型,變數,函數等方面,在學習這些基礎知識的時候需要注意,要理解,不要記憶。如果當你遇到某些問題,需要靠回憶來找到解決問題的辦法,則說明你沒有能夠真正的理解這個問題。如何加深理解?惟有多加練習,不要嫌它們過於簡單,簡單的背後可能蘊含著複雜的理念,即便是一個等號,也值得寫上幾十行程式來驗證它在不同情況下所起的作用。總之,既然是基礎,對任何人來說都是一樣的,它不是那種需要發揮人類想象力和創造力的上層建築。因此,實踐+總結是學習基礎知識的唯一途徑。當你對AS基礎有了一個較為完整的掌握後,就可以向更進階的領域進發了。


(04.27.2004)
五、幾點你應該知道的
學習基礎也是有竅門的,對於大部分概念來說,都相對符合人的思維邏輯,因此你可以輕易的理解它們,也不容易發生混淆;但對於初入編程世界的朋友們來說,仍有一些是規則是陌生的,甚至是難以理解的。這時候,你所要做的就是學習並接受它們,如果你不顧這些規則而隨意在這個世界中馳騁,我想編譯器一定會給你好看。
以下是我所總結的在學習編程基礎知識的時候你所應該注意的要點,有掛一漏萬之嫌,但至少頗具代表性。看看你是否已經熟練的掌握了它們:

1、標識符規則:
這裡的規則不僅僅指那些由編譯器老大管轄的條條框框:不能以數字開頭,可以包含數字、字母、底線、貨幣符號......等等。同樣也包含一些“民間”的約定,例如變數、函數命名以小寫字母開頭,類命名以大寫字母開頭,常量命名均使用大寫字母等等.....你不遵守這些約定,編譯器不會對你亮紅燈,但會造成你的程式可讀性下降。這樣我想起《thinking in java》的譯著作者侯捷先生,就是因為忽視了大陸讀者的閱讀習慣,自創了一些生澀的詞彙,結果被很多讀者以此為借口拋擲雞蛋(當然我明白更主要的原因是大多數讀者嫌這本書實在太貴了)。

2.=與==
如果你正在讀小學一年級,你可以告訴我“=”與“==”的區別就是一個等號和兩個等號的區別,但作為一個程式員,你應該理解它們從根本上不是一類事物,“=”是賦值運算子,而“==”是比較子。所以不要再問我if(a=b) a=1;這樣的代碼為什麼不對。但我承認,在剛開始接觸程式的時候(c語言),我也犯過不少次這樣的錯誤,而且很長時間找不到問題所在,等到發現了錯誤,又總是自責自己為什麼會如此愚蠢。我現在特別提醒你注意這一點,如果仍然犯下這樣的錯誤,那隻能說明你比我更加愚蠢。

3.運算子優先順序
一個經常被人忽視的問題!的確,它可以通過另一種方式來完全避免優先順序帶來的困擾,那就是頻繁的使用“()”,通過“()”來決定你每一步的運算順序。只要你不怕麻煩,你完全可以這麼做,而且也增加了程式的可讀性。但不是所有的人都喜歡這樣,一個老資格的程式員通常願意在一大長串運算式中使用數個優先順序各不相同的運算子且不包含任何的小括弧,這種情況就是對你對運算子優先順序的掌握的一個考驗了。但不管怎麼說,使用“()”來明確你的運算順序並不是一件壞事,甚至值得推薦。

4.i++與++i
我在前面的文章中就已經提到這個問題,儘管現在看起來簡單無比,但當時的確給我們帶來了一些困擾,這個問題也是非常普遍的。充分理解它的方法就是寫幾個包含i++和++i的運算式,然後觀察運算式的運算結果及i的值。很快,這對於你來說將不再是個問題。

5.資料類型轉換
你可能不經常用到資料類型轉換,但你至少該知道它們的原理,那些轉換是隱式的,而那些轉換必須顯式地進行,而且有可能造成資料的損壞。瞭解了這些,可以讓你避免一些奇怪的錯誤。因為通常由資料類型轉換所帶來的程式問題很難被覺察到。

6.數組
嚴格的說,數組不是一種資料類型,而是一種資料結構。這是一個值得你認真研究的概念。因為在實際應用中,數組的使用率大大超過其他集合類型甚至是某些原始類型。你需要瞭解構造和初始化數組的各種有效格式,同時也應該對二位元組有所瞭解。數組與迴圈控制的配合可能已經可以一個完整的程式中一半的工作。


(04.28.2004)
六、初學者應該學習AS1.0還是AS2.0?
這個問題同樣人氣很旺,頻繁的出現在論壇的角落裡,然後就會有“一群”(原諒我使用這個詞)終年未見發過一貼的潛水員們浮上岸來指手畫腳一番,然後又匆匆前入水底,我不知道是否只有這種頗具爭議性的話題才能請他們“高抬貴手”,表達出他們各自的偉大構想,但是,在談論這個話題之前,確實讓我覺得的很為難,因為要想把的立場表達清楚,我不得不提及很多對於初學者來說可能為所未聞的術語,例如原型、繼承、介面等等。我的目的只是想闡述AS1.0和AS2.0的區別,以便推出自己對這個問題的結論。最後,我還是決定無視那些術語的存在,直接給出結論,如果你不能夠信服,請你在實踐中去驗證好了。我的結論是:AS2.0與AS1.0從本質上完全相同,但AS2.0比AS1.0更加的嚴格,更加的合理,更加像一種真正的物件導向語言。然而,如果你打算直接學習AS2.0,那麼你不得不在面對一堆陌生的API的同時,還要去理解你可能從未接觸過的物件導向編程理念。這對一些初學者可能是災難性的,因為他們可能被太多的未知因素所嚇倒。因此,我的建議是:以AS2.0的文法規範去學習AS1.0,它意味著:你應該先忽視AS2.0中與自訂類、介面有關的一切,只關注Flash提供的API,但同時你需要遵守AS2.0所引入的新的文法規範,包括強型別、大小寫敏感等等。

這樣做的好處有兩個:

一、初學者不會同時面對API與設計理念的困擾。
二、習慣了AS2.0的文法規範為今後由AS1.0向AS2.0轉型打好基礎。

(很多人問到為什麼在Flash MX中執行的好好的程式到了Flash MX 2004中出了問題?這就是你沒有注意到AS2.0的文法規範起了變化)。
可能有的朋友會問,既然AS1.0與AS2.0本質上是相同的,那麼為什麼我們在學習AS1.0前不用可以的去學習物件導向思想呢?這是因為:AS1.0的設計思想中,包含了物件導向和面向過程兩個分支,這兩個分支是“交叉”的。而在大多數AS1.0的程式設計中,我們相對重視它的面向過程的那個分支,而物件導向的分支則被Flash本身的機制(以MovieClip為核心)巧妙的、隱式的實現了。我知道很多人看到這裡會暈,別擔心,我將陸續在我的連載中給大家一個滿意的解釋。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。