給所有ActionScript初學(xué)者的一點(diǎn)建議 經(jīng)典
聲明:這篇文章我將以連載的形式,不定期的更新,有興趣的朋友可以隨時(shí)關(guān)注。
本文允許隨意轉(zhuǎn)載,但請(qǐng)注明:作者:jinni,出處:經(jīng)典論壇
(04.26.2004)
在論壇當(dāng)斑竹時(shí)間長(zhǎng)了,經(jīng)常會(huì)碰到有朋友提出這樣的問(wèn)題:我是菜鳥(niǎo),請(qǐng)問(wèn)高手,AS到底該怎么學(xué)?我自認(rèn)算不上高手,但三年的AS編程經(jīng)驗(yàn),多少也可以算半個(gè)老手(應(yīng)了藍(lán)色那句話:沒(méi)有菜鳥(niǎo)和高手之分,只有新手和老手之別),之所以這么說(shuō),就是為了先表明立場(chǎng),在網(wǎng)上混了這些時(shí)間,國(guó)內(nèi)的AS頂尖高手我大都還算認(rèn)識(shí),自知尚無(wú)資格與他們比肩,之所以恬不知恥撰此一文,實(shí)在是不忍看著眾多初學(xué)者因?yàn)槊恢鴮W(xué)習(xí)的門(mén)路而苦苦摸索抑或干脆放棄,文中所述均為筆者個(gè)人愚見(jiàn),有欠妥之處歡迎探討。另外,非常感謝AOL,他提供了文章中用到的一些很重要的信息。
一、什么是AcionScript?
隨手翻開(kāi)一本技術(shù)類(lèi)書(shū)籍,第一章第一節(jié)多半以“What's xxxx”做標(biāo)題,要學(xué)習(xí)學(xué)一樣技術(shù),當(dāng)然最先要弄清它是什么。用最簡(jiǎn)單的一句話定義:AS是一種腳本語(yǔ)言。這句話里有兩個(gè)關(guān)鍵詞:一、語(yǔ)言:所有的計(jì)算機(jī)語(yǔ)言都是相通的(包括匯編語(yǔ)言、中級(jí)語(yǔ)言、高級(jí)語(yǔ)言),這意味著如果你曾經(jīng)系統(tǒng)的學(xué)習(xí)過(guò)其他的某種計(jì)算機(jī)語(yǔ)言,那么AS入門(mén)將變得非常容易。二、腳本:這說(shuō)明AS是一種解釋型語(yǔ)言(或稱為腳本語(yǔ)言)。它具備了解釋型語(yǔ)言的優(yōu)點(diǎn):快速開(kāi)發(fā),動(dòng)態(tài)性,學(xué)習(xí)門(mén)檻低等等,同時(shí)它也繼承了相應(yīng)的缺點(diǎn):最主要的兩個(gè)缺點(diǎn)是效率低下和源代碼外露。這也是讓當(dāng)今Flash開(kāi)發(fā)者極為頭痛的兩個(gè)問(wèn)題,效率低下,意味著Flash無(wú)法有效的完成一些復(fù)雜的算法(就拿遞歸來(lái)說(shuō),F(xiàn)lash中僅允許256層深度的遞歸)。而源代碼外露,則讓Flash作者的版權(quán)無(wú)法得到有效的保護(hù),國(guó)內(nèi)外很多著名的反編譯軟件都可以讓Flash中的程序代碼無(wú)處遁形。盡管如此,畢竟瑕不掩瑜,F(xiàn)lash AS仍然是一種簡(jiǎn)單易用,功能強(qiáng)大的腳本語(yǔ)言,高超的AS編程技巧+良好的美工+優(yōu)秀的創(chuàng)意可以打造出許許多多令人瞠目結(jié)舌的作品:絢麗的特效,趣味性極強(qiáng)的的游戲,功能強(qiáng)大的網(wǎng)絡(luò)應(yīng)用程序....然而,這一切都是要從最基礎(chǔ)到如變量、函數(shù)開(kāi)始(當(dāng)然,如果你有編程基礎(chǔ)那就另當(dāng)別論),在宏偉的大廈也是一磚一瓦建設(shè)起來(lái)的,不是嗎?
二、解釋型?編譯型?跨平臺(tái)?
可能有朋友注意到,剛才談到Flash的源代碼外露的問(wèn)題時(shí),有這樣一句話“很多著名的反編譯軟件....”,即曰“解釋”,又何以“反編譯”?并非是我出爾反爾,F(xiàn)lash AS的的確確是通過(guò)解釋執(zhí)行的,而用來(lái)解釋+執(zhí)行的工具,就是大名鼎鼎、擁有98%瀏覽器占有率的Flash Player。然而,在你把源程序放心交給Flash Player去執(zhí)行之前,必須要經(jīng)過(guò)一個(gè)“編譯”的過(guò)程,它將源代碼轉(zhuǎn)換成一種可以被FP識(shí)別的標(biāo)簽(tag)。而這些標(biāo)簽被以ZIP方式壓縮存儲(chǔ)在.swf格式的文件中。當(dāng)然,一個(gè).swf文件中除了包含AS,還有圖形、聲音等資源。在“解釋”之前先進(jìn)行“編譯”并非是多此一舉,編譯的好處主要有三個(gè):一、經(jīng)過(guò)編譯后的源代碼,以標(biāo)簽(稱為“目標(biāo)代碼”)的形式存在,更容易被Flash Player識(shí)別,因而可以提高解釋速度。二、編譯過(guò)程可以預(yù)先檢測(cè)程序中的語(yǔ)法錯(cuò)誤,并給出適當(dāng)?shù)腻e(cuò)誤信息,方便調(diào)試。三、編譯過(guò)程也是代碼壓縮的過(guò)程,編譯后的代碼更加精簡(jiǎn)。
這么說(shuō)來(lái),把AS稱為一種純粹的解釋型語(yǔ)言就有失妥當(dāng)了,我們可以把它歸類(lèi)為一種“混合型”語(yǔ)言?;旌闲驼Z(yǔ)言的特點(diǎn)是,源代碼先經(jīng)過(guò)編譯,生成一種“中間代碼”,在由相應(yīng)的平臺(tái)(Flash Player)去解釋執(zhí)行中間代碼?;旌闲驼Z(yǔ)言中的佼佼者當(dāng)屬現(xiàn)在同樣火熱的Java語(yǔ)言:Java語(yǔ)言的源代碼(.java)經(jīng)過(guò)編譯,得到字節(jié)碼(.class),在由平臺(tái)(JVM)去解釋執(zhí)行字節(jié)碼。不幸的是,混合型語(yǔ)言的這種這種“編譯”過(guò)程通常是可逆的,無(wú)論是java還是flash,都可以根據(jù)其中間代碼,反編譯得到源代碼。而且,反編譯swf的難度要遠(yuǎn)遠(yuǎn)低于class,而在編譯過(guò)程中加密要復(fù)雜的多,這也就是為什么如今flash反編譯軟件橫行的原因。
Flash Player的另一個(gè)優(yōu)勢(shì)是提供了跨平臺(tái)性,無(wú)論何種平臺(tái),只要擁有內(nèi)嵌Flash Player的瀏覽器或是獨(dú)立的Flash Player播放器,就可以欣賞Flash,而swf文件本身不需要任何的改變,不同的只是Flash Player在各個(gè)平臺(tái)的實(shí)現(xiàn)方式而已。這一點(diǎn)也是它能夠廣泛應(yīng)用于互聯(lián)網(wǎng)的原因之一??赡苡械呐笥严氲紽lash的另一種播放方式,即Projector方式,通常我們所見(jiàn)到的是一個(gè).exe文件。然而需要注意的是,以Projector方式發(fā)布的Flash,是不具備跨平臺(tái)能力的。只要明白了Projector的原理,就可以很容易理解這一點(diǎn),其實(shí)Projector僅僅是簡(jiǎn)單的將一個(gè)獨(dú)立的Flash Player播放器和swf文件整合,前面提到,不同平臺(tái)的Flash Player實(shí)現(xiàn)不同,因此,被整合到Projector中的swf無(wú)法使用不同的Flash Player播放,自然也就失去了其跨平臺(tái)性。Projector真正的好處在于,可以讓原本沒(méi)有Flash Player的機(jī)器,在不安裝FP的情況下,瀏覽Flash。其效果大致相當(dāng)于你去買(mǎi)DVD光碟,但是你沒(méi)有DVD機(jī),因此賣(mài)光碟的小販免費(fèi)送了你一臺(tái)DVD機(jī)一樣。當(dāng)然,現(xiàn)實(shí)中不可能有這樣的好事。
三、學(xué)習(xí)AS需要不需要有編程基礎(chǔ)?如果需要,該去學(xué)習(xí)那種語(yǔ)言?
這是一個(gè)經(jīng)常聽(tīng)到的問(wèn)題。我前面曾經(jīng)提到,如果你有著其他語(yǔ)言的編程基礎(chǔ),學(xué)習(xí)AS將變成一件非常容易的事。但如果沒(méi)有呢?是不是會(huì)很困難?答案是否定的??偟膩?lái)說(shuō),AS是一種相對(duì)比較簡(jiǎn)單的語(yǔ)言,甚至你可以用它來(lái)作為你進(jìn)入編程世界的第一步。如果你有著c/java/js的編程經(jīng)驗(yàn),你將會(huì)發(fā)現(xiàn)AS只是你曾經(jīng)學(xué)習(xí)并掌握的知識(shí)的一個(gè)子集,你面對(duì)的僅僅是不同的API,僅此而已。然而,如果你的目的只是為了學(xué)習(xí)AS,那你完全沒(méi)有必要為了它先去學(xué)習(xí)其他任何一種語(yǔ)言,這就像你為了弄明白1+1=2,而費(fèi)盡九牛二虎之力去研究2+2=4一樣,本末倒置。你現(xiàn)在所要做的,就是從最基礎(chǔ)開(kāi)始。何謂基礎(chǔ)?變量、數(shù)據(jù)類(lèi)型、運(yùn)算符等等都算是基礎(chǔ),學(xué)了一段時(shí)間編程卻仍然搞不清楚i++與++i的區(qū)別的人不在少數(shù)。不要小看它們,對(duì)基礎(chǔ)概念掌握的不牢固,可能會(huì)為你將來(lái)的編程經(jīng)歷造成重大的困擾,正所謂千里之堤,潰于蟻穴。在這個(gè)時(shí)候,你可能需要一本書(shū)來(lái)幫助你,筆者極力推薦下面這本書(shū):
看到他的封面,你就知道這本書(shū)是由鼎鼎大名的O'reilly公司出版。如今,O'reilly公司的出版物儼然已成為計(jì)算機(jī)技術(shù)圖書(shū)的標(biāo)準(zhǔn),看到了O'reilly的標(biāo)志,就等于看到了質(zhì)量的保證。(我所說(shuō)的僅僅是針對(duì)英文原版而言,對(duì)于有條件的讀者來(lái)說(shuō),應(yīng)該盡可能閱讀英文原版。英語(yǔ)不好也沒(méi)關(guān)系,看看 http://bbs.blueidea.com/viewthread.php?tid=799443)
這本書(shū)可以說(shuō)是Flash ActionScript的絕佳入門(mén)書(shū)籍,書(shū)中系統(tǒng)地闡述了AS中所有的基礎(chǔ)內(nèi)容,包括:變量,數(shù)據(jù)與數(shù)據(jù)類(lèi)型,原始數(shù)據(jù)類(lèi)型,運(yùn)算符,語(yǔ)句,條件語(yǔ)句,循環(huán)控制語(yǔ)句,函數(shù),事件與事件處理,數(shù)組,對(duì)象與類(lèi)等等。
先不要被這一大堆內(nèi)容嚇倒,聰明的你應(yīng)該很容易理解它們,學(xué)習(xí)的目的在于運(yùn)用。因此,對(duì)你來(lái)說(shuō)最重要的是按照書(shū)中的例子重新做一遍,以加深理解,最好能夠修改那些例子,并對(duì)出現(xiàn)的錯(cuò)誤加以分析。這樣,你將會(huì)發(fā)現(xiàn)自己的進(jìn)步速度之快甚至超過(guò)了自己的想象,盡管你現(xiàn)在還不能做出什么像摸象樣的東西,但是,這將為你今后的成就奠定堅(jiān)實(shí)的基礎(chǔ)。有的朋友總是不重視這樣的基礎(chǔ)訓(xùn)練,認(rèn)為創(chuàng)意、思想最為重要,誠(chéng)然,我不否認(rèn)創(chuàng)意在我們工作中的重要性,但好的創(chuàng)意,也是需要基礎(chǔ)來(lái)實(shí)現(xiàn)的,否則,你充其量只能做個(gè)空想家罷了。
四、免費(fèi)的就是最好的
下午文章剛一發(fā)表,就收到Flash Coders群里的朋友們的意見(jiàn),認(rèn)為我所推薦的書(shū)籍《ActionScript權(quán)威指南》對(duì)于初學(xué)者來(lái)說(shuō),難度有些大了。的確,也許這本書(shū)并不完全適合于沒(méi)有任何編程基礎(chǔ)的初學(xué)者,我所以推薦這本書(shū)的主要原因是,它的講解足夠系統(tǒng)化,按部就班,而且充分利用代碼把很多容易混淆的概念分析的比較透徹,令人印象深刻。就像《Thinking in Java》,我從不認(rèn)為這本書(shū)適合于Java初學(xué)者閱讀(時(shí)至今日,盡管我自認(rèn)為已經(jīng)不算是Java初學(xué)者,但書(shū)中的很多內(nèi)容我仍然沒(méi)有能完全消化掉),但每當(dāng)有人問(wèn)我有哪些優(yōu)秀的Java書(shū)籍時(shí),我總是第一個(gè)想到它。所以,我們或許可以把《ActionScript權(quán)威指南》當(dāng)作一本復(fù)習(xí)手冊(cè),當(dāng)你對(duì)AS有了一個(gè)整體的印象之后,再捧起這本書(shū),你也許會(huì)發(fā)現(xiàn)許多以往學(xué)習(xí)中的漏洞,或是一直盤(pán)繞在你心頭的疑惑驟然解開(kāi)。然而,究竟由誰(shuí)來(lái)給你這個(gè)“整體的印象”?更為淺顯的書(shū)籍?入門(mén)培訓(xùn)課程?在這里我要說(shuō)的是“免費(fèi)的就是最好的”,雖然這句話不適用于每一個(gè)角落,但在這里,F(xiàn)lash隨帶軟件附贈(zèng)的幫助系統(tǒng)絕對(duì)可以勝任入門(mén)師傅這個(gè)角色。很多人小看了軟件的幫助系統(tǒng),認(rèn)為它們只不過(guò)是教你如何安裝,如何卸載,這真是一個(gè)天大的誤會(huì),尤其當(dāng)你使用的是某種語(yǔ)言的IDE時(shí),這個(gè)誤會(huì)就更加夸張了。僅僅以Flash的幫助系統(tǒng)來(lái)說(shuō),已經(jīng)可以稱得上是一本Bible。初學(xué)者可以從中解決幾乎所有的問(wèn)題。“幫助”的英文是Help,“救命”的英文也是Help,所以,如果你有在論壇發(fā)帖喊“救命”的時(shí)間,不如去抓住身邊這額棵救命稻草。更何況,論壇的帖子可能三天也沒(méi)有人回復(fù),而幫助系統(tǒng)則是隨叫隨到。
接下來(lái)的問(wèn)題是,如何更好的使用幫助?按照筆者的意見(jiàn),一個(gè)完善幫助系統(tǒng)主要有兩個(gè)職能:一、入門(mén)指導(dǎo)。二、工具書(shū)。Flash的幫助系統(tǒng)很好的完成了這些工作。以Flash MX 2004的幫助系統(tǒng)為例,整個(gè)系統(tǒng)分成五個(gè)部分:Getting started with Flash,Using Flash,ActionScript Reference Guide,ActionScript Dictionary,Using Components,前兩部分基本上與ActionScript無(wú)關(guān),這里不與考慮。后三部分中,第三和第五部分便是最好的入門(mén)指導(dǎo),第四部分則是一部完整的AS字典,可以隨時(shí)查閱。對(duì)于Flash初學(xué)者來(lái)說(shuō),可以先忽略掉組件(Components)的部分,下面讓我們來(lái)看看ActionScript Reference Guide:第一章講了一些廢話,第二章也不是為初學(xué)者設(shè)計(jì),它概述了Flash MX到2004在AS方面的變化,有興趣的朋友可以看一下我的“2004新特性實(shí)例教程”。地址: http://bbs.blueidea.com/viewthread.php?tid=1177438 而接下來(lái)的第三章:Flash基礎(chǔ),則是重中之重了。它從最基本的語(yǔ)法講起,先后涉及了數(shù)據(jù)類(lèi)型,變量,函數(shù)等方面,在學(xué)習(xí)這些基礎(chǔ)知識(shí)的時(shí)候需要注意,要理解,不要記憶。如果當(dāng)你遇到某些問(wèn)題,需要靠回憶來(lái)找到解決問(wèn)題的辦法,則說(shuō)明你沒(méi)有能夠真正的理解這個(gè)問(wèn)題。如何加深理解?惟有多加練習(xí),不要嫌它們過(guò)于簡(jiǎn)單,簡(jiǎn)單的背后可能蘊(yùn)含著復(fù)雜的理念,即便是一個(gè)等號(hào),也值得寫(xiě)上幾十行程序來(lái)驗(yàn)證它在不同情況下所起的作用??傊?,既然是基礎(chǔ),對(duì)任何人來(lái)說(shuō)都是一樣的,它不是那種需要發(fā)揮人類(lèi)想象力和創(chuàng)造力的上層建筑。因此,實(shí)踐+總結(jié)是學(xué)習(xí)基礎(chǔ)知識(shí)的唯一途徑。當(dāng)你對(duì)AS基礎(chǔ)有了一個(gè)較為完整的掌握后,就可以向更高級(jí)的領(lǐng)域進(jìn)發(fā)了。
(04.27.2004)
五、幾點(diǎn)你應(yīng)該知道的
學(xué)習(xí)基礎(chǔ)也是有竅門(mén)的,對(duì)于大部分概念來(lái)說(shuō),都相對(duì)符合人的思維邏輯,因此你可以輕易的理解它們,也不容易發(fā)生混淆;但對(duì)于初入編程世界的朋友們來(lái)說(shuō),仍有一些是規(guī)則是陌生的,甚至是難以理解的。這時(shí)候,你所要做的就是學(xué)習(xí)并接受它們,如果你不顧這些規(guī)則而隨意在這個(gè)世界中馳騁,我想編譯器一定會(huì)給你好看。
以下是我所總結(jié)的在學(xué)習(xí)編程基礎(chǔ)知識(shí)的時(shí)候你所應(yīng)該注意的要點(diǎn),有掛一漏萬(wàn)之嫌,但至少頗具代表性??纯茨闶欠褚呀?jīng)熟練的掌握了它們:
1、標(biāo)識(shí)符規(guī)則:
這里的規(guī)則不僅僅指那些由編譯器老大管轄的條條框框:不能以數(shù)字開(kāi)頭,可以包含數(shù)字、字母、下劃線、美元符號(hào)......等等。同樣也包含一些“民間”的約定,例如變量、函數(shù)命名以小寫(xiě)字母開(kāi)頭,類(lèi)命名以大寫(xiě)字母開(kāi)頭,常量命名均使用大寫(xiě)字母等等.....你不遵守這些約定,編譯器不會(huì)對(duì)你亮紅燈,但會(huì)造成你的程序可讀性下降。這樣我想起《thinking in java》的譯著作者侯捷先生,就是因?yàn)楹鲆暳舜箨懽x者的閱讀習(xí)慣,自創(chuàng)了一些生澀的詞匯,結(jié)果被很多讀者以此為借口拋擲雞蛋(當(dāng)然我明白更主要的原因是大多數(shù)讀者嫌這本書(shū)實(shí)在太貴了:))。
2.=與==
如果你正在讀小學(xué)一年級(jí),你可以告訴我“=”與“==”的區(qū)別就是一個(gè)等號(hào)和兩個(gè)等號(hào)的區(qū)別,但作為一個(gè)程序員,你應(yīng)該理解它們從根本上不是一類(lèi)事物,“=”是賦值運(yùn)算符,而“==”是比較運(yùn)算符。所以不要再問(wèn)我if(a=b) a=1;這樣的代碼為什么不對(duì)。但我承認(rèn),在剛開(kāi)始接觸程序的時(shí)候(c語(yǔ)言),我也犯過(guò)不少次這樣的錯(cuò)誤,而且很長(zhǎng)時(shí)間找不到問(wèn)題所在,等到發(fā)現(xiàn)了錯(cuò)誤,又總是自責(zé)自己為什么會(huì)如此愚蠢。我現(xiàn)在特別提醒你注意這一點(diǎn),如果仍然犯下這樣的錯(cuò)誤,那只能說(shuō)明你比我更加愚蠢。:)
3.運(yùn)算符優(yōu)先級(jí)
一個(gè)經(jīng)常被人忽視的問(wèn)題!的確,它可以通過(guò)另一種方式來(lái)完全避免優(yōu)先級(jí)帶來(lái)的困擾,那就是頻繁的使用“()”,通過(guò)“()”來(lái)決定你每一步的運(yùn)算順序。只要你不怕麻煩,你完全可以這么做,而且也增加了程序的可讀性。但不是所有的人都喜歡這樣,一個(gè)老資格的程序員通常愿意在一大長(zhǎng)串表達(dá)式中使用數(shù)個(gè)優(yōu)先級(jí)各不相同的運(yùn)算符且不包含任何的小括號(hào),這種情況就是對(duì)你對(duì)運(yùn)算符優(yōu)先級(jí)的掌握的一個(gè)考驗(yàn)了。但不管怎么說(shuō),使用“()”來(lái)明確你的運(yùn)算順序并不是一件壞事,甚至值得推薦。
4.i++與++i
我在前面的文章中就已經(jīng)提到這個(gè)問(wèn)題,盡管現(xiàn)在看起來(lái)簡(jiǎn)單無(wú)比,但當(dāng)時(shí)的確給我們帶來(lái)了一些困擾,這個(gè)問(wèn)題也是非常普遍的。充分理解它的方法就是寫(xiě)幾個(gè)包含i++和++i的表達(dá)式,然后觀察表達(dá)式的運(yùn)算結(jié)果及i的值。很快,這對(duì)于你來(lái)說(shuō)將不再是個(gè)問(wèn)題。
5.數(shù)據(jù)類(lèi)型轉(zhuǎn)換
你可能不經(jīng)常用到數(shù)據(jù)類(lèi)型轉(zhuǎn)換,但你至少該知道它們的原理,那些轉(zhuǎn)換是隱式的,而那些轉(zhuǎn)換必須顯式地進(jìn)行,而且有可能造成數(shù)據(jù)的損壞。了解了這些,可以讓你避免一些奇怪的錯(cuò)誤。因?yàn)橥ǔS蓴?shù)據(jù)類(lèi)型轉(zhuǎn)換所帶來(lái)的程序問(wèn)題很難被覺(jué)察到。
6.數(shù)組
嚴(yán)格的說(shuō),數(shù)組不是一種數(shù)據(jù)類(lèi)型,而是一種數(shù)據(jù)結(jié)構(gòu)。這是一個(gè)值得你認(rèn)真研究的概念。因?yàn)樵趯?shí)際應(yīng)用中,數(shù)組的使用率大大超過(guò)其他集合類(lèi)型甚至是某些原始類(lèi)型。你需要了解構(gòu)造和初始化數(shù)組的各種有效的格式,同時(shí)也應(yīng)該對(duì)二位數(shù)組有所了解。數(shù)組與循環(huán)控制的配合可能已經(jīng)可以一個(gè)完整的程序中一半的工作。
(04.28.2004)
六、初學(xué)者應(yīng)該學(xué)習(xí)AS1.0還是AS2.0?
這個(gè)問(wèn)題同樣人氣很旺,頻繁的出現(xiàn)在論壇的角落里,然后就會(huì)有“一群”(原諒我使用這個(gè)詞)終年未見(jiàn)發(fā)過(guò)一貼的潛水員們浮上岸來(lái)指手畫(huà)腳一番,然后又匆匆前入水底,我不知道是否只有這種頗具爭(zhēng)議性的話題才能請(qǐng)他們“高抬貴手”,表達(dá)出他們各自的偉大構(gòu)想,但是,在談?wù)撨@個(gè)話題之前,確實(shí)讓我覺(jué)得的很為難,因?yàn)橐氚训牧?chǎng)表達(dá)清楚,我不得不提及很多對(duì)于初學(xué)者來(lái)說(shuō)可能為所未聞的術(shù)語(yǔ),例如原型、繼承、接口等等。我的目的只是想闡述AS1.0和AS2.0的區(qū)別,以便推出自己對(duì)這個(gè)問(wèn)題的結(jié)論。最后,我還是決定無(wú)視那些術(shù)語(yǔ)的存在,直接給出結(jié)論,如果你不能夠信服,請(qǐng)你在實(shí)踐中去驗(yàn)證好了。:)我的結(jié)論是:AS2.0與AS1.0從本質(zhì)上完全相同,但AS2.0比AS1.0更加的嚴(yán)格,更加的合理,更加像一種真正的面向?qū)ο笳Z(yǔ)言。然而,如果你打算直接學(xué)習(xí)AS2.0,那么你不得不在面對(duì)一堆陌生的API的同時(shí),還要去理解你可能從未接觸過(guò)的面向?qū)ο缶幊汤砟?。這對(duì)一些初學(xué)者可能是災(zāi)難性的,因?yàn)樗麄兛赡鼙惶嗟奈粗蛩厮鶉樀?。因此,我的建議是:以AS2.0的語(yǔ)法規(guī)范去學(xué)習(xí)AS1.0,它意味著:你應(yīng)該先忽視AS2.0中與自定義類(lèi)、接口有關(guān)的一切,只關(guān)注Flash提供的API,但同時(shí)你需要遵守AS2.0所引入的新的語(yǔ)法規(guī)范,包括強(qiáng)類(lèi)型、大小寫(xiě)敏感等等。這樣做的好處有兩個(gè):一、初學(xué)者不會(huì)同時(shí)面對(duì)API與設(shè)計(jì)理念的困擾,二、習(xí)慣了AS2.0的語(yǔ)法規(guī)范為今后由AS1.0向AS2.0轉(zhuǎn)型打好基礎(chǔ)。(很多人問(wèn)到為什么在Flash MX中執(zhí)行的好好的程序到了Flash MX 2004中出了問(wèn)題?這就是你沒(méi)有注意到AS2.0的語(yǔ)法規(guī)范起了變化)。
可能有的朋友會(huì)問(wèn),既然AS1.0與AS2.0本質(zhì)上是相同的,那么為什么我們?cè)趯W(xué)習(xí)AS1.0前不用可以的去學(xué)習(xí)面向?qū)ο笏枷肽??這是因?yàn)椋篈S1.0的設(shè)計(jì)思想中,包含了面向?qū)ο蠛兔嫦蜻^(guò)程兩個(gè)分支,這兩個(gè)分支是“交叉”的。而在大多數(shù)AS1.0的程序設(shè)計(jì)中,我們相對(duì)重視它的面向過(guò)程的那個(gè)分支,而面向?qū)ο蟮姆种t被Flash本身的機(jī)制(以MovieClip為核心)巧妙的、隱式的實(shí)現(xiàn)了。我知道很多人看到這里會(huì)暈,別擔(dān)心,我將陸續(xù)在我的連載中給大家一個(gè)滿意的解釋。
(05.02.2004)
七、提問(wèn)的智慧
前面討論了那么多技術(shù)性的問(wèn)題,你看得累了,我也寫(xiě)的煩了,學(xué)習(xí)本身不僅僅是學(xué)習(xí)某項(xiàng)技能,更要掌握一種技巧,這次我們就來(lái)淺談一下提問(wèn)的技巧。其實(shí),我現(xiàn)在來(lái)寫(xiě)這樣的話題未免有畫(huà)蛇添足之嫌,因?yàn)樵缬幸黄浅?yōu)秀的文章深入地探討了這一問(wèn)題,而我這一節(jié)的標(biāo)題更是原封不動(dòng)照抄而來(lái),建議所有喜歡在論壇尋求幫助的人都仔細(xì)的閱讀一下這篇文章: http://bbs.blueidea.com/viewthread.php?tid=449319 也許你看到我這篇文章已經(jīng)覺(jué)得有些拖沓冗長(zhǎng),不想再痛苦一次,沒(méi)關(guān)系,我可以幫你把文章中的重點(diǎn)總結(jié)出來(lái),同時(shí)結(jié)合中國(guó)國(guó)情和Flash論壇的特點(diǎn),現(xiàn)在就check一下自己是否能夠做到這些要求:
1.什么時(shí)候才要提問(wèn):首先嘗試一切辦法自己解決問(wèn)題:google,文檔,論壇精華貼,置頂貼,最重要的:自己的大腦。當(dāng)以上工具都無(wú)法幫助你解決問(wèn)題時(shí),再去提問(wèn),這樣別人才不會(huì)覺(jué)得你是個(gè)懶漢,只喜歡提出一些不過(guò)大腦的愚蠢問(wèn)題。
2.準(zhǔn)確的描述你的問(wèn)題:“為什么我的代碼不起作用?”“為什么這個(gè)效果出不來(lái)?”這樣的問(wèn)題通常難以得到滿意的回答,因?yàn)閯e人根本不知道你在問(wèn)什么。
3.善用標(biāo)題:作為一個(gè)版主,我不可能每次來(lái)到論壇都有時(shí)間仔細(xì)的瀏覽每一個(gè)帖子,所以,對(duì)于這樣的標(biāo)題:“求助!”“高手進(jìn)來(lái)看一下”....我可能就會(huì)“優(yōu)先”忽略,我沒(méi)有那么大的好奇心非要去一探究竟,但對(duì)于“為什么可以用[]來(lái)引用對(duì)象?”這類(lèi)相對(duì)表述較為清楚的標(biāo)題,我通常會(huì)盡可能給與同樣清楚地解釋。
4.尊重他人:記?。耗阍谡搲@得的一切幫助都是無(wú)償?shù)模@里沒(méi)有人欠你什么,你沒(méi)有資格要求別人為你做任何事。所以,請(qǐng)不要有任何催促的情緒,例如我昨天剛剛看到的一個(gè)標(biāo)題:“這次真的非常急!我連晚飯還沒(méi)有吃呢!”,我的第一反應(yīng)就是:“你吃沒(méi)吃晚飯跟我有什么關(guān)系?”,用一些與問(wèn)題本身毫不相關(guān)的事情來(lái)修飾你的話題,無(wú)非是在催促高手們盡快幫你解答。你認(rèn)為多寫(xiě)上三個(gè)“急!”會(huì)讓你的問(wèn)題得到更快的解答?事實(shí)正相反,你可能在減少你獲得答案的機(jī)會(huì)。剛才說(shuō)的是情緒問(wèn)題,而后一種態(tài)度問(wèn)題就更不可以理喻:“有人能幫我做一個(gè)XXX嗎,做好發(fā)到我的郵箱”,通常對(duì)于這樣的問(wèn)題,我會(huì)直接刪除,如果你是老板,請(qǐng)讓你的屬下去做,畢竟你是要開(kāi)工資給他的。
5.關(guān)于道謝:時(shí)至今日,每當(dāng)我在國(guó)內(nèi)外的論壇上甚至是QQ群里獲得任何形式的幫助,我都不會(huì)忘記說(shuō)一聲“謝謝”。這是最基本的禮貌,盡管中國(guó)的“謝謝”不象英語(yǔ)國(guó)家使用“thanks”那樣普遍(在許多英語(yǔ)國(guó)家中,thanks是家庭常用語(yǔ),例如母親給兒子遞過(guò)一本書(shū),兒子會(huì)說(shuō)“Thanks,Mom”,但似乎在中國(guó)的家庭內(nèi)很少聽(tīng)到,似乎這一切都是理所當(dāng)然的),可是無(wú)論如何,你在論壇里獲得的幫助也應(yīng)該值得你說(shuō)出“謝謝”這兩個(gè)字。在解決問(wèn)題后及時(shí)地道謝可以幫你樹(shù)立一個(gè)良好的形象,也有助于你下次更好的獲得幫助。
6.自尊:前面談了尊重別人的問(wèn)題,也許你自認(rèn)為已經(jīng)做到了,但你是否注意了相對(duì)應(yīng)的另一個(gè)問(wèn)題:你是否做到了自尊?每個(gè)人都希望被尊重,但如果你無(wú)法做到自己尊重自己,那也就不可能有別人來(lái)尊重你。近年來(lái),國(guó)內(nèi)論壇上出現(xiàn)了一系列讓我厭惡之極的求助方式,即“跪求”“跪謝”“裸求”等等。對(duì)于中國(guó)人來(lái)說(shuō),下跪是一種極其有失身份的行為,是一種屈服、懦弱的表現(xiàn),也許你說(shuō)我小題大作,但看著滿屏的“跪求”之類(lèi)的標(biāo)題,我真的不禁在想:?jiǎn)杺€(gè)問(wèn)題而已,用的著這么嗎?我在國(guó)外的論壇上從來(lái)沒(méi)有看到過(guò)“Kneeling for help!”這樣的標(biāo)題,甚至“Help!!”這樣的標(biāo)題已經(jīng)惹人反感了(見(jiàn)前面我推薦的那篇文章),為什么國(guó)人就那么“放得開(kāi)”?我個(gè)人的原則是:遇到這樣的人,無(wú)論他提出什么樣的問(wèn)題,我都不予理睬。想學(xué)技術(shù)?先學(xué)做人吧。
我知道今天這一節(jié)的內(nèi)容可能引起爭(zhēng)議,在文中我也沒(méi)有任何的保留,非常直接的反映了我個(gè)人對(duì)一些事物的看法,只希望每一個(gè)閱讀此文的人明白,我的目的,只是希望大家可以更好的從論壇上獲得幫助,That's all.
(待續(xù))
相關(guān)文章
xflash第一次升級(jí),xfml功能被強(qiáng)化
xflash第一次升級(jí),xfml功能被強(qiáng)化...2006-12-12土人系列AS入門(mén)教程--實(shí)戰(zhàn)篇
2008-02-02