給ActionScript3.0初學者的建議(二)
給ActionScript3.0初學者的建議(二)
下午文章剛一發(fā)表,就收到Flash Coders群里的朋友們的意見,認為我所推薦的書籍《ActionScript權(quán)威指南》對于初學者來說,難度有些大了。的確,也許這本書并不完全適合于沒有任何編程基礎(chǔ)的初學者,我所以推薦這本書的主要原因是,它的講解足夠系統(tǒng)化,按部就班,而且充分利用代碼把很多容易混淆的概念分析的比較透徹,令人印象深刻。就像《Thinking in Java》,我從不認為這本書適合于Java初學者閱讀(時至今日,盡管我自認為已經(jīng)不算是Java初學者,但書中的很多內(nèi)容我仍然沒有能完全消化掉),但每當有人問我有哪些優(yōu)秀的Java書籍時,我總是第一個想到它。所以,我們或許可以把《ActionScript權(quán)威指南》當作一本復(fù)習手冊,當你對AS有了一個整體的印象之后,再捧起這本書,你也許會發(fā)現(xiàn)許多以往學習中的漏洞,或是一直盤繞在你心頭的疑惑驟然解開。
然而,究竟由誰來給你這個“整體的印象”?更為淺顯的書籍?入門培訓(xùn)課程?在這里我要說的是“免費的就是最好的”,雖然這句話不適用于每一個角落,但在這里,F(xiàn)lash隨帶軟件附贈的幫助系統(tǒng)絕對可以勝任入門師傅這個角色。很多人小看了軟件的幫助系統(tǒng),認為它們只不過是教你如何安裝,如何卸載,這真是一個天大的誤會,尤其當你使用的是某種語言的IDE時,這個誤會就更加夸張了。僅僅以Flash的幫助系統(tǒng)來說,已經(jīng)可以稱得上是一本Bible。初學者可以從中解決幾乎所有的問題。“幫助”的英文是Help,“救命”的英文也是Help,所以,如果你有在論壇發(fā)帖喊“救命”的時間,不如去抓住身邊這額棵救命稻草。更何況,論壇的帖子可能三天也沒有人回復(fù),而幫助系統(tǒng)則是隨叫隨到。:)
接下來的問題是,如何更好的使用幫助?
按照筆者的意見,一個完善幫助系統(tǒng)主要有兩個職能:
一、入門指導(dǎo)。二、工具書。
Flash的幫助系統(tǒng)很好的完成了這些工作。以Flash MX 2004的幫助系統(tǒng)為例,整個系統(tǒng)分成五個部分:Getting started with Flash,Using Flash,ActionScript Reference Guide,ActionScript Dictionary,Using Components,前兩部分基本上與ActionScript無關(guān),這里不與考慮。后三部分中,第三和第五部分便是最好的入門指導(dǎo),第四部分則是一部完整的AS字典,可以隨時查閱。對于Flash初學者來說,可以先忽略掉組件(Components)的部分,下面讓我們來看看ActionScript Reference Guide:第一章講了一些廢話,第二章也不是為初學者設(shè)計,它概述了Flash MX到2004在AS方面的變化,有興趣的朋友可以看一下我的“2004新特性實例教程”。地址: www.blueidea.com/bbs/newsdetail.asp?id=1177438&posts=current 而接下來的第三章:Flash基礎(chǔ),則是重中之重了。它從最基本的語法講起,先后涉及了數(shù)據(jù)類型,變量,函數(shù)等方面,在學習這些基礎(chǔ)知識的時候需要注意,要理解,不要記憶。如果當你遇到某些問題,需要靠回憶來找到解決問題的辦法,則說明你沒有能夠真正的理解這個問題。如何加深理解?惟有多加練習,不要嫌它們過于簡單,簡單的背后可能蘊含著復(fù)雜的理念,即便是一個等號,也值得寫上幾十行程序來驗證它在不同情況下所起的作用?傊,既然是基礎(chǔ),對任何人來說都是一樣的,它不是那種需要發(fā)揮人類想象力和創(chuàng)造力的'上層建筑。因此,實踐+總結(jié)是學習基礎(chǔ)知識的唯一途徑。當你對AS基礎(chǔ)有了一個較為完整的掌握后,就可以向更高級的領(lǐng)域進發(fā)了。
五、幾點你應(yīng)該知道的
學習基礎(chǔ)也是有竅門的,對于大部分概念來說,都相對符合人的思維邏輯,因此你可以輕易的理解它們,也不容易發(fā)生混淆;但對于初入編程世界的朋友們來說,仍有一些是規(guī)則是陌生的,甚至是難以理解的。這時候,你所要做的就是學習并接受它們,如果你不顧這些規(guī)則而隨意在這個世界中馳騁,我想編譯器一定會給你好看。 : )
以下是我所總結(jié)的在學習編程基礎(chǔ)知識的時候你所應(yīng)該注意的要點,有掛一漏萬之嫌,但至少頗具代表性?纯茨闶欠褚呀(jīng)熟練的掌握了它們:
1、標識符規(guī)則:
這里的規(guī)則不僅僅指那些由編譯器老大管轄的條條框框:不能以數(shù)字開頭,可以包含數(shù)字、字母、下劃線、美元符號......等等。同樣也包含一些“民間”的約定,例如變量、函數(shù)命名以小寫字母開頭,類命名以大寫字母開頭,常量命名均使用大寫字母等等.....你不遵守這些約定,編譯器不會對你亮紅燈,但會造成你的程序可讀性下降。這樣我想起《thinking in java》的譯著作者侯捷先生,就是因為忽視了大陸讀者的閱讀習慣,自創(chuàng)了一些生澀的詞匯,結(jié)果被很多讀者以此為借口拋擲雞蛋(當然我明白更主要的原因是大多數(shù)讀者嫌這本書實在太貴了: )。
2.=與==
如果你正在讀小學一年級,你可以告訴我“=”與“==”的區(qū)別就是一個等號和兩個等號的區(qū)別,但作為一個程序員,你應(yīng)該理解它們從根本上不是一類事物,“=”是賦值運算符,而“==”是比較運算符。所以不要再問我if(a=b) a=1;這樣的代碼為什么不對。但我承認,在剛開始接觸程序的時候(c語言),我也犯過不少次這樣的錯誤,而且很長時間找不到問題所在,等到發(fā)現(xiàn)了錯誤,又總是自責自己為什么會如此愚蠢。我現(xiàn)在特別提醒你注意這一點,如果仍然犯下這樣的錯誤,那只能說明你比我更加愚蠢。:)
3.運算符優(yōu)先級
一個經(jīng)常被人忽視的問題!的確,它可以通過另一種方式來完全避免優(yōu)先級帶來的困擾,那就是頻繁的使用“()”,通過“()”來決定你每一步的運算順序。只要你不怕麻煩,你完全可以這么做,而且也增加了程序的可讀性。但不是所有的人都喜歡這樣,一個老資格的程序員通常愿意在一大長串表達式中使用數(shù)個優(yōu)先級各不相同的運算符且不包含任何的小括號,這種情況就是對你對運算符優(yōu)先級的掌握的一個考驗了。但不管怎么說,使用“()”來明確你的運算順序并不是一件壞事,甚至值得推薦。
4.i++與++i
我在前面的文章中就已經(jīng)提到這個問題,盡管現(xiàn)在看起來簡單無比,但當時的確給我們帶來了一些困擾,這個問題也是非常普遍的。充分理解它的方法就是寫幾個包含i++和++i的表達式,然后觀察表達式的運算結(jié)果及i的值。很快,這對于你來說將不再是個問題。
5.數(shù)據(jù)類型轉(zhuǎn)換
你可能不經(jīng)常用到數(shù)據(jù)類型轉(zhuǎn)換,但你至少該知道它們的原理,那些轉(zhuǎn)換是隱式的,而那些轉(zhuǎn)換必須顯式地進行,而且有可能造成數(shù)據(jù)的損壞。了解了這些,可以讓你避免一些奇怪的錯誤。因為通常由數(shù)據(jù)類型轉(zhuǎn)換所帶來的程序問題很難被覺察到。
6.數(shù)組
嚴格的說,數(shù)組不是一種數(shù)據(jù)類型,而是一種數(shù)據(jù)結(jié)構(gòu)。這是一個值得你認真研究的概念。因為在實際應(yīng)用中,數(shù)組的使用率大大超過其他集合類型甚至是某些原始類型。你需要了解構(gòu)造和初始化數(shù)組的各種有效的格式,同時也應(yīng)該對二位數(shù)組有所了解。數(shù)組與循環(huán)控制的配合可能已經(jīng)可以一個完整的程序中一半的工作。
六、初學者應(yīng)該學習AS1.0還是AS2.0?
這個問題同樣人氣很旺,頻繁的出現(xiàn)在論壇的角落里,然后就會有“一群”(原諒我使用這個詞)終年未見發(fā)過一貼的潛水員們浮上岸來指手畫腳一番,然后又匆匆前入水底,我不知道是否只有這種頗具爭議性的話題才能請他們“高抬貴手”,表達出他們各自的偉大構(gòu)想,但是,在談?wù)撨@個話題之前,確實讓我覺得的很為難,因為要想把的立場表達清楚,我不得不提及很多對于初學者來說可能為所未聞的術(shù)語,例如原型、繼承、接口等等。我的目的只是想闡述AS1.0和AS2.0的區(qū)別,以便推出自己對這個問題的結(jié)論。最后,我還是決定無視那些術(shù)語的存在,直接給出結(jié)論,如果你不能夠信服,請你在實踐中去驗證好了。: )
我的結(jié)論是:AS2.0與AS1.0從本質(zhì)上完全相同,但AS2.0比AS1.0更加的嚴格,更加的合理,更加像一種真正的面向?qū)ο笳Z言。然而,如果你打算直接學習AS2.0,那么你不得不在面對一堆陌生的API的同時,還要去理解你可能從未接觸過的面向?qū)ο缶幊汤砟。這對一些初學者可能是災(zāi)難性的,因為他們可能被太多的未知因素所嚇倒。
因此,我的建議是:以AS2.0的語法規(guī)范去學習AS1.0。
它意味著:你應(yīng)該先忽視AS2.0中與自定義類、接口有關(guān)的一切,只關(guān)注Flash提供的API,但同時你需要遵守AS2.0所引入的新的語法規(guī)范,包括強類型、大小寫敏感等等。這樣做的好處有兩個:
一、初學者不會同時面對API與設(shè)計理念的困擾,
二、習慣了AS2.0的語法規(guī)范為今后由AS1.0向AS2.0轉(zhuǎn)型打好基礎(chǔ)。
(很多人問到為什么在Flash MX中執(zhí)行的好好的程序到了Flash MX 2004中出了問題?這就是你沒有注意到AS2.0的語法規(guī)范起了變化)。
可能有的朋友會問,既然AS1.0與AS2.0本質(zhì)上是相同的,那么為什么我們在學習AS1.0前不用可以的去學習面向?qū)ο笏枷肽?這是因為:AS1.0的設(shè)計思想中,包含了面向?qū)ο蠛兔嫦蜻^程兩個分支,這兩個分支是“交叉”的。而在大多數(shù)AS1.0的程序設(shè)計中,我們相對重視它的面向過程的那個分支,而面向?qū)ο蟮姆种t被Flash本身的機制(以MovieClip為核心)巧妙的、隱式的實現(xiàn)了。我知道很多人看到這里會暈,別擔心,我將陸續(xù)在我的連載中給大家一個滿意的解釋。
【給ActionScript3.0初學者的建議(二)】相關(guān)文章: