主流編程語言優(yōu)劣考_第1頁
主流編程語言優(yōu)劣考_第2頁
主流編程語言優(yōu)劣考_第3頁
主流編程語言優(yōu)劣考_第4頁
主流編程語言優(yōu)劣考_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、主流編程語言優(yōu)劣考前言本文的目的并非是想挑起語言之爭,而是希望通過客觀地分析每一種主流 語言的能力,辨明其長短,讓程序員能夠揚(yáng)長避短,有效地使用各種語言。讓 各種語言能夠各安其位,為你更好的服務(wù)。程序員應(yīng)當(dāng)成為語言的主人,而不是語言的奴隸。正文這里,我將比較一下幾種主流編程語言:C, C+ Java, .NET, Ruby,JavaScript。其他主流編程語言,如Pascal,Delphi ,我不太熟悉。希望熟悉的朋友能 夠補(bǔ)全對這些語言的評價(jià)。至于Basic ,它的版本差異很大,而且能力不太全面,這里也不做評價(jià)。語言特性對比表C C+Java.NET Ruby JavaScript類型無類

2、型強(qiáng)類型強(qiáng)類型強(qiáng)類型強(qiáng)類型強(qiáng)類型靜態(tài)/動(dòng)態(tài)靜態(tài)靜態(tài)靜態(tài)檢驗(yàn)類型動(dòng)態(tài)解釋執(zhí)行動(dòng)態(tài)動(dòng)態(tài)支持面向過程是是否否否是支持基于對象否是否是是是支持范型否否是是否否支持模板否是否否否否支持面向?qū)ο蠓袷鞘鞘欠穹窨赡苣銓τ谖疫@樣的語言評價(jià)有些疑問,請首先看我的另一篇文章基于對 象和面向?qū)ο缶幊谭妒奖嫖龊椭髁骶幊陶Z言中的應(yīng)用理清相關(guān)的概念。我對與 面向?qū)ο蠛突趯ο蟮亩x和流行的定義不太一樣。C語言優(yōu)劣考C語言由來讓我們先回顧一下歷史。電腦使用CPU旨令,通過寄存器,內(nèi)存等物件執(zhí)行計(jì)算。最早的編程,是 直接使用代表CPU旨令的機(jī)器碼編寫的。直接使用二進(jìn)制的數(shù)據(jù)編程,當(dāng)然很容易出錯(cuò)。于是,人們后來發(fā)明了一種方法,就

3、是使用英語單詞作為助記符,代表各 條CPU旨令。這就是匯編語言?,F(xiàn)在,程序員可以使用英語單詞進(jìn)行編程,然后使用一 個(gè)解釋程序,把匯編指令翻譯成機(jī)器語言,再交給計(jì)算機(jī)執(zhí)行。1970年,UNIX操作系統(tǒng)的研制者丹尼斯里奇(Dennis Ritchie) 和肯湯 普遜(Ken Thompson)為了更好地編寫操作系統(tǒng),發(fā)明了 C語言。C語言比匯編語言更先進(jìn)。它使用了面向過程的編程范式。同時(shí)它仍是一 門十分接近匯編語言,面向機(jī)器的編程語言。適合編寫操作系統(tǒng)和其他直接操 縱硬件硬件的編程。面向過程編程范式下面是我查到的過程式設(shè)計(jì)的定義:過程式設(shè)計(jì):1、自上而下(top-down)的設(shè)計(jì)方式:是一個(gè)自頂向

4、下,逐步求精的過程;2、以main函數(shù)概括出整個(gè)應(yīng)用程序需要做的事情,而 main函數(shù)由對一系列的子函數(shù)的調(diào)用組成;main中的每一個(gè)子函數(shù)都可以被精煉成更小的函數(shù)。重復(fù)這個(gè)過程,即可 完成一個(gè)過程式的設(shè)計(jì);3、特征是以函數(shù)為中心,以函數(shù)作為劃分程序的基本單位,數(shù)據(jù)往往處于 從屬地位。過程式設(shè)計(jì)的優(yōu)點(diǎn):易于掌握與理解,符合人們的思維習(xí)慣;過程式設(shè)計(jì)的缺點(diǎn):1、不能適應(yīng)問題比較復(fù)雜,或者需求經(jīng)常變化的情況;2、數(shù)據(jù)與操作分離開,對數(shù)據(jù)與操作的修改變得很困難;3、程序架構(gòu)的依賴關(guān)系不合理:main函數(shù)依賴于子函數(shù),子函數(shù)又依賴 于更小的子函數(shù);而子函數(shù)往往是細(xì)節(jié)的實(shí)現(xiàn),這些實(shí)現(xiàn)是經(jīng)常變化的,造成的

5、結(jié)構(gòu)就是:程序的核心邏輯依賴于外延的細(xì)節(jié),一個(gè)細(xì)節(jié)上的小改動(dòng),會(huì)引起一系列 的變動(dòng)。我對于面向過程編程范式是這樣理解的:面向過程編程,就是使用函數(shù)代表處理的過程。這些函數(shù)使用的數(shù)據(jù),要 么是參數(shù),要么是外部的數(shù)據(jù)。使用函數(shù)編程,這看上去很像函數(shù)式編程。但面向過程的編程范式不同于 函數(shù)式編程。函數(shù)式編程的函數(shù),一般不使用外部的數(shù)據(jù)。不維持外部的狀態(tài)。 這有很多優(yōu)點(diǎn),但也同樣有了很大的局限性,不似面向過程編程這樣方便。C語言就是典型的面向過程編程語言。它通過函數(shù)抽象了過程處理。函數(shù), 就是C語言的接口。C語言中,數(shù)據(jù)常常作為全局的變量保存起來。這樣,使用 C語言編程就 很難保證其他代碼不破壞函數(shù)依

6、賴的數(shù)據(jù)的狀態(tài)。這是 C+用于對象編程范式 出現(xiàn)的原因。這個(gè)我們稍后再說。我們再看看C語言對機(jī)器指令的抽象。C語言是一門十分接近匯編語言的語言。所以有人說 C語言既是一門高級 語言(面向過程,函數(shù)),也是一門低級語言(面向機(jī)器,直接反映計(jì)算機(jī)的實(shí)際 計(jì)算過程)。C語言使用原生類型,數(shù)組,Struct等來表示數(shù)據(jù)。C語言中,數(shù)據(jù)在內(nèi) 存中的表示是十分確定的。程序員可以充分控制。如,C語言中可以使用memcpy()直接復(fù)制內(nèi)存中的數(shù)據(jù)。現(xiàn)在,大多數(shù)的操作系統(tǒng)原生函數(shù)庫,都使用 C語言作為其接口。絕大多 數(shù)的語言都具備與C語言函數(shù)庫進(jìn)行互操作的能力。C語言可以說是程序世界的世界語。C語言的優(yōu)點(diǎn)1,面

7、向過程開發(fā),以函數(shù)為中心。簡單有效。實(shí)現(xiàn)了簡單的接口。2,面向機(jī)器,讓用戶可以完全的操縱機(jī)器,效率較高。C語言運(yùn)行高效,廣泛應(yīng)用于各種計(jì)算領(lǐng)域。對于簡單的任務(wù),非常有效。C語言的缺點(diǎn)1,函數(shù)無法有效控制需要的數(shù)據(jù)。不能保證外部狀態(tài)不變。容易出現(xiàn) Bug。2,對于機(jī)器的控制太強(qiáng),也就是依賴太強(qiáng)。由于過于強(qiáng)調(diào)效率,使用 C語 言編程時(shí),更多的需要考慮機(jī)器,而不是問題本身。由于過于關(guān)注機(jī)器,而不是問題域本身,因此抽象能力不足。容易出現(xiàn)各 種Bug。對于編寫大型的程序,常常力不從心。C語言的使用方法C語言作為一種簡單高效的編程語言,適用于編寫簡單的程序。在編程中, 應(yīng)該注意揚(yáng)長避短,使用面向過程的編程

8、范式,少用對機(jī)器的依賴。1,使用函數(shù)編程時(shí),應(yīng)該盡量使用函數(shù)參數(shù)傳遞狀態(tài),少用全局?jǐn)?shù)據(jù)。因 為,你無法保證全局?jǐn)?shù)據(jù)不被其他代碼改變。這樣使用函數(shù),叫作"純函數(shù)"。類似于函數(shù)式編程的用法。而且,使用這 種方式編程,由于不存在全局?jǐn)?shù)據(jù),在進(jìn)行多線程開發(fā)時(shí),還不需要考慮多線 程問題。2,使用結(jié)構(gòu)化的編程方式。不要賣弄技巧。3,函數(shù)是接口。盡量使用函數(shù)調(diào)用,而不是直接的代碼。通過層層分層, 分配職責(zé),編寫出短小精悍,易于維護(hù)的代碼。4,盡管C語言是一種面向機(jī)器的語言。但是,我們還是應(yīng)該盡量少地依賴 機(jī)器。多從問題域來考慮和抽象問題。如,少用內(nèi)存假設(shè)等等。因?yàn)椋覀儠?huì) 使用很多種語言

9、,C, C+, Java, C好語言的很多語法類似。但是實(shí)際的表現(xiàn), 各個(gè)語言都是不同的。如果過分考慮 C的機(jī)器特性,那么很可能會(huì)因?yàn)橛涘e(cuò)而 編寫出錯(cuò)誤的代碼。5,代碼,首先是給人看的。順便給機(jī)器執(zhí)行!不要處處優(yōu)化代碼。只應(yīng)該優(yōu)化性能瓶頸。因?yàn)閮?yōu)化的代碼,常常表示很 難看懂!6,應(yīng)該大量使用Struct組織相關(guān)的數(shù)據(jù)。在用C語言編程時(shí),也應(yīng)該樹 立類型和對象狀態(tài)的概念。把 Struct作為函數(shù)的參數(shù)傳遞數(shù)據(jù)。C+郵言優(yōu)劣考在C語言優(yōu)劣考中曾經(jīng)說過:C語言中,數(shù)據(jù)常常作為全局的變量保存起 來。這樣,使用C語言編程就很難保證其他代碼不破壞函數(shù)依賴的數(shù)據(jù)的狀態(tài)。 這是C+®于對象編程范式出

10、現(xiàn)的原因。C+銀初是作為C語言的擴(kuò)展出現(xiàn)的,最初的名字就叫“帶類的C-o后來, C+鏈漸演化成一門獨(dú)立白語言。但還是和 C語言兼容?;趯ο蟮木幊谭妒交趯ο蟮木幊谭妒?,又稱"抽象數(shù)據(jù)類型"(ADT)。面向過程的編程范式中,函數(shù)無法控制函數(shù)外的共享數(shù)據(jù)。這使面向過程 的編程語言不能很好地編寫大型系統(tǒng)。為了解決這個(gè)問題,人們發(fā)明了基于對 象的編程范式。就是把數(shù)據(jù)和處理數(shù)據(jù)的函數(shù)都封裝在一個(gè)類中。這樣,共享的數(shù)據(jù)就不 會(huì)再被外部的代碼改變了!下面是我查到的定義:抽象數(shù)據(jù)類型(Abstract Type 簡稱ADT)AD說指抽象數(shù)據(jù)的組織和與之相關(guān)的操作。可以看作是數(shù)據(jù)的邏輯結(jié)構(gòu)

11、 及其在邏輯結(jié)構(gòu)上定義的操作。ADTB描述規(guī)范一個(gè)ADTW描述為:ADT ADT-NameData: /數(shù)據(jù)說明數(shù)據(jù)元素之間邏輯關(guān)系的描述Operations : / 操作說明Operationl : 操作1,它通常可用C或C+十的函數(shù)原型來描述Input :對輸入數(shù)據(jù)的說明Preconditions :執(zhí)行本操作前系統(tǒng)應(yīng)滿足的狀態(tài)/可看作初始條件Process :對數(shù)據(jù)執(zhí)行的操作Output:對返回?cái)?shù)據(jù)的說明Postconditions :執(zhí)行本操作后系統(tǒng)的狀態(tài)/"系統(tǒng)"可看作某個(gè)數(shù)據(jù)結(jié)構(gòu)Operation2 : / 操作 2/ADT抽象數(shù)據(jù)類型可以看作是描述問題的模型,

12、它獨(dú)立于具體實(shí)現(xiàn)。它的優(yōu)點(diǎn) 是將數(shù)據(jù)和操作封裝在一起,使得用戶程序只能通過在ADT里定義的某些操作來訪問其中的數(shù)據(jù),從而實(shí)現(xiàn)了信息隱藏。在 C+中,我們可以用類(包括模 板類)的說明來表示ADT用類的實(shí)現(xiàn)來實(shí)現(xiàn) ADT因此,C+中實(shí)現(xiàn)的類相當(dāng) 于是數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)及其在存儲(chǔ)結(jié)構(gòu)上實(shí)現(xiàn)的對數(shù)據(jù)的操作。AD用口類的概念實(shí)際上反映了程序或軟件設(shè)計(jì)的兩層抽象:ADT相當(dāng)于是在概念層(或稱為抽象層)上描述問題,而類相當(dāng)于是在實(shí)現(xiàn)層上描述問題。止匕外, C+十中的類只是一個(gè)由用戶定義的普通類型,可用它來定義變量(稱為對象或類的實(shí)例)。因此,在C+中,最終是通過操作對象來解決實(shí)際問題的,所以 我們可將該層次看

13、作是應(yīng)用層。例如, main程序就可看作是用戶的應(yīng)用程序。C+歧持多范型的開發(fā)方式:面向過程,基于對象,面向?qū)ο?,模版。C+F口 C語言是兼容的。因此,你完全可以使用 C+S譯系統(tǒng)編寫C語言的 程序,因此,支持面向過程編程是很自然的。但是,使用面向過程編程,還能說是在使用 C+S程嗎?另外,需要注意,c+胡言,實(shí)際上是一種不同于 c語言的新語言。在內(nèi)存 上,除了一些C語言的元素之外,新的語言元素并不像 C那樣面向機(jī)器。對于C+,你不能使用memcp殍內(nèi)存操作的函數(shù),很可能會(huì)出現(xiàn)錯(cuò)誤。因 為C+胡言建立在一些高級概念的規(guī)范上,這些規(guī)范并沒有規(guī)定內(nèi)存如何分配 等機(jī)器方面的細(xì)節(jié)。我在基于對象和面向?qū)?/p>

14、象編程范式辨析和主流編程語言中的應(yīng)用一文中已 經(jīng)指出基于對象和模板是必須組合在一起使用的技術(shù)。C+”首選的編程范式是“模板支持的基于對象”的編程范式。實(shí)現(xiàn)靜態(tài)多態(tài)。然后才是面向?qū)ο蟮木幊谭妒健?shí)現(xiàn)動(dòng)態(tài)多態(tài)。最后是C語言風(fēng)格的面向過程編程。C+勺使用方法使用C/C+討發(fā)環(huán)境,我們可以同時(shí)使用 C和C+鐘發(fā)。既然C+林口 C是兼 容的,我認(rèn)為完全沒有理由使用 C語言,而不使用C+!行開發(fā)。即使是很小的問題,使用C+r模板支持的基于對象”的編程范式也是首 選的開發(fā)方式。另一方面,在整個(gè)類庫的外部,如果我們希望向其他語言提供接口,那么 我們還應(yīng)當(dāng)提供C語言的API函數(shù)作為接口。C語言是程序世界的世界語

15、。使用 C+勺基本類型,struct , STL庫的 Vector , STL 的 string : c_str() 等都可以得到C語言兼容的接口。還不能使用異常。因?yàn)?C語言不支持異常, 而且C+陣身的異常,在不同的編譯器中也可能不兼容??傊?,使用C+鐘發(fā),只在外部接口中使用 C語言開發(fā)。使用“模板支持的基 于對象”的編程范式,或者面向?qū)ο蟮木幊谭妒?。不要使用面向過程的編程范式。2,盡量把代碼放到類中,而不是使用全局或者命名空間的變量。3,盡量不要使用操作符重載。4,必須注意到C+Ma C語言那樣面向機(jī)器,不能對 C+寸象的內(nèi)存布局 進(jìn)行假設(shè)。不能根據(jù)內(nèi)存內(nèi)的數(shù)據(jù)直接構(gòu)建對象。不要進(jìn)行內(nèi)存

16、操作。5, C+處是很面向機(jī)器的。很多語言規(guī)則都規(guī)定了內(nèi)存的布局,必須按照 規(guī)則定義、初始化等等。這和 Java, .NET, Ruby等語言不同。用慣高級語言的 程序員特別需要注意C+拜口 C對程序員的繁瑣要求。C/C+勺設(shè)計(jì)哲學(xué)中,始終把自己作為一門系統(tǒng)編程語言,針對機(jī)器進(jìn)行了 很多優(yōu)化。因此,對于人,就很不照顧了。很多規(guī)則很不人性化。但沒辦法, 你必須適應(yīng)它們!它們就是為了高效而生的。它們就是匯編的替代者。Java語言優(yōu)劣考Java是一門靜態(tài)強(qiáng)類型面向?qū)ο蟮木幊陶Z言。它是 C+林口 Smalltalk取長 補(bǔ)短的產(chǎn)物。Java是靜態(tài)編譯的強(qiáng)類型語言。你必須聲明變量的類型,以便編譯器能夠

17、檢查代碼的類型是否正確。這和 C+隹相同的。Java是一門類型非常安全的編 程語言。Java只支持一種編程范式:面向?qū)ο缶幊谭妒?。對于過時(shí)的面向過程編程 范式并不支持。也不支持基于對象的編程范式,也沒有模板。原因可能是,當(dāng)java在90年代中期剛剛誕生時(shí),面向過程的編程已被唾 棄。而C+勺基于對象的編程方式,由于沒有和模板相互結(jié)合,而名聲掃地。 C+寸于面向?qū)ο蟮木幊谭妒降闹С钟直容^差。于是,汲取經(jīng)驗(yàn)教訓(xùn)之后,Java作為一門純正的面向?qū)ο缶幊陶Z言誕生了。Java使用面向?qū)ο蟮木幊谭妒綄?shí)現(xiàn)了動(dòng)態(tài)多態(tài),實(shí)現(xiàn)了抽象化的編程方式。 取得了巨大的成功。Java語言中,除了基本類型是值類型之外,沒有任何

18、值類型,你也不能創(chuàng) 建任何值類型。這樣,基于對象編程這條路就被卡死了。雖然喪失了值類型的效率,但是也避免了基于對象編程的大量錯(cuò)誤。Java語言中所有方法也都是虛函數(shù)。這也是為了保證純正的面向?qū)ο缶幊獭ava語言是靜態(tài)面向?qū)ο缶幊谭妒降捻敺?。使用面向接口的抽象編程,?有效使用java開發(fā)的唯一途徑!另一方面,Java實(shí)際上是一門動(dòng)態(tài)語言。它是動(dòng)態(tài)解釋執(zhí)行的。和Ruby,JavaScript 等樣。這使java具備了運(yùn)行時(shí)的靈活性??梢詫?shí)現(xiàn)自省,反射等C+將傳統(tǒng)靜態(tài)語言無法實(shí)現(xiàn)的功能。.NET語言優(yōu)劣考.NET是java的兄弟。是微軟因?yàn)楸?Sun排除在java之外而開發(fā)的一套語 言。主要包括

19、 C#, VB.net,C+/CLI等語言。它的設(shè)計(jì)理念基本和java相同,也是一個(gè)支持靜態(tài)面向?qū)ο缶幊谭妒降钠?臺(tái)。對于.NET語言平臺(tái),我選擇 C#f口 C+/CLI這兩種語言進(jìn)行論述。VB.NET 和C#fe似,這里就不再多說了。C#C#.net還支持值類型,也就是基于對象的編程范式。(當(dāng)然,.NET框架也 是支持值類型的)C#.net的泛型類型替換是在運(yùn)行時(shí)執(zhí)行的。對于引用類型 (在堆內(nèi)存中創(chuàng) 建實(shí)例的類型),它使用類型強(qiáng)制轉(zhuǎn)換,而不是 C+真板的源代碼生成來實(shí)現(xiàn)參 數(shù)化類型。對于值類型,則使用類似于C+鎖板的MSIL中間代碼生成機(jī)制實(shí)現(xiàn)。順便提一下,java的泛型實(shí)現(xiàn)和C#勺機(jī)制類似

20、。也是使用強(qiáng)制類型轉(zhuǎn)換實(shí) 現(xiàn)。而且,Java中沒有值類型,也不能對基本類型進(jìn)行泛型操作,因此沒有 C# 和C+”的源代碼擴(kuò)張問題。但是,老實(shí)說,java的泛型機(jī)制確實(shí)太弱了!C#§言首選的是面向?qū)ο缶幊谭妒健她可以使用泛型支持的基于對象的 編程范式。使用值類型,對于用慣面向?qū)ο缶幊谭妒降?C杯口 java程序員來說有一定 的難度。而且,提升的效率也并不很高。同時(shí),在語法層面上,C#乏型是實(shí)現(xiàn)參數(shù)化類型的更簡單方法,不具有 C+鎖板的復(fù)雜卜to止匕外,C到不嘗t的I供C+徽板所提供的所有功能。因此,C#乏型支持的基于對象編程要比模板支持的基于對象的編程要弱很 多。理念上,泛型編程有些

21、不倫不類,有著太強(qiáng)的面向?qū)ο缶幊痰臍馕?。C鼾,使用泛型支持的基于對象的編程范式不如面向?qū)ο缶幊谭妒?。我認(rèn)為,C#S言還是應(yīng)該首先使用面向?qū)ο缶幊谭妒?。C+/CLI C+/CLI是為了讓C+改用.NET平臺(tái)而提供的擴(kuò)展機(jī)制。.NET平臺(tái)是類似于java的靜態(tài)強(qiáng)類型動(dòng)態(tài)執(zhí)行的執(zhí)行平臺(tái)。是面向?qū)ο?編程范式理念的框架。C+/CLI使用了新的語法,使用 C+/CLI進(jìn)行.NET開發(fā)時(shí),類似于C#S程。同時(shí),也可以使用模板進(jìn)行 C+/CLI編程。這是C+/CLI2005新增的功能。使用C+/CLI進(jìn)行.NET編程時(shí),既可以使用 C#羊式的面向?qū)ο缶幊?。也?以使用模板支持的基于對象的編程范式進(jìn)行開發(fā)???/p>

22、以把模板支持的基于對象的編程范式和.NET的面向?qū)ο蟮木幊谭妒浇Y(jié)合 起來使用。C+/CLI可以同時(shí)使用原生C+林D.NET編程。如果使用.NET框架執(zhí)行,那 么C+吸生代碼就會(huì)存放在生成的 MSIL中間代碼中,在運(yùn)行時(shí)再使用 C+魏譯 器編譯成機(jī)器碼。.NET的互操作機(jī)制.NET運(yùn)行時(shí)本身就是使用COMS寫的,是一個(gè)COM艮務(wù)器。因此,.NET和 COMT操作是非常簡單的。也可以使用 CO瞰術(shù),用C/C+A接調(diào)用.NET內(nèi)的 方法。在互操彳上。.NET比java實(shí)現(xiàn)得更好。不能從C語言調(diào)用Java方法,只 能從java代碼中使用JNI調(diào)用C方法??傮w評價(jià).NET是java的表兄弟。又做出了一下

23、改變。1,定義了 .NET的匯編語言?;?NET的匯編語言可以支持任何語言 在.NET平臺(tái)上執(zhí)行。Java自然也可以作為一個(gè)平臺(tái)。但是java平臺(tái)的設(shè)計(jì)目 標(biāo)就是java這一種語言,因此沒有定義匯編語言,只有 java的機(jī)器碼。2,支持值類型。雖然用處不大,但是可以提高性能,也方便與C語言的函數(shù)庫交互。3,泛型的實(shí)現(xiàn)比java強(qiáng)大。4,特別是C+/CLI,具有模板*.NET運(yùn)行庫的強(qiáng)大能力。Ruby語言優(yōu)劣考Ruby是一種強(qiáng)類型的動(dòng)態(tài)解釋型語言。在 Ruby中一切都是對象。使用Duck Typing"像鴨子一樣編程"的編程理念。Ruby有類型,但是變量不確定類型。這也實(shí)現(xiàn)

24、了動(dòng)態(tài)的多態(tài)能力。不象Java, .NET等靜態(tài)面向?qū)ο缶幊陶Z言,不需要使用什么都不作,僅僅 表示類型的規(guī)范的接口。 Ruby中使用變量時(shí)不需要聲明使用什么接口或者類型。任何類型都可以,只要確實(shí)有這樣的方法或者數(shù)據(jù)成員存在即可!類似于C+勺模板編程,只是C+勺模板需要指定參數(shù)的類型。Ruby不需 要指定變量的類型,因此不需要模板那樣的機(jī)制。Ruby這樣不指定變量類型的語言使用起來非常靈活。按照動(dòng)態(tài)語言的觀點(diǎn),既然編譯時(shí)不能完全找出運(yùn)行時(shí)的錯(cuò)誤,不如不要 編譯時(shí)檢查,也不要編譯。使用單元測試來尋找錯(cuò)誤。但是,C+, Java, .NET這樣的編譯時(shí)檢查類型的語言也有自己的優(yōu)點(diǎn):1,更加安全,編譯

25、時(shí)就會(huì)發(fā)現(xiàn)錯(cuò)誤。2,可以實(shí)現(xiàn)IDE的智能提示。而Ruby這樣的語言就不可以。因?yàn)?C+, Java的變量使用時(shí)都指定了類型,因此可以在 IDE中智能提示可能的成員。而Ruby這樣的動(dòng)態(tài)語言的變量都沒有指定類型,所以無法為你提供智能提 示。使用Ruby,應(yīng)該使用”動(dòng)態(tài)類型語言”的基于對象的編程范式,使用隱式的 接口。使用的類不需要有一個(gè)共同的基類。讓各個(gè)實(shí)現(xiàn)類互相獨(dú)立存在就行了。 記住,這是和C+勺模板支持下的基于對象的編程范式類似的基于對象 (ADT抽 象數(shù)據(jù)類型)的編程!不要試圖用java , C艇樣的語言的面向?qū)ο蟮木幊趟季S方式來編寫Ruby程序!JavaScript語言優(yōu)劣考JavaSc

26、ript是一門長期以來被忽視的語言。它的重要性和能力都被大大的 低估了!這是因?yàn)镴ava和.NET崛起以來,"靜態(tài)類型語言"的面向?qū)ο蟮木幊谭妒?受到廣泛的推崇。作為動(dòng)態(tài)語言,函數(shù)式語言的 JavaScript長期以來被廣大 Java, .NET程序員視為畸形怪胎!老實(shí)說,長久以來,我也一直是以厭惡的眼 光看待它。多少次,它讓我很抓狂。盡管JavaScript已經(jīng)誕生了這么多年,但是把 JavaScript作為一門很有 前途的動(dòng)態(tài)強(qiáng)類型語言,函數(shù)式語言來看待還是新鮮事物。還沒有見到很多關(guān) 于這方面和設(shè)計(jì)模式的研究。JavaScript支持面向過程的編程范式這是JavaScript使用最廣泛的一種編程范式。簡單、快速、有效。JavaScript代碼需要通過網(wǎng)絡(luò)傳輸?shù)接脩魹g覽器中,因此 JavaScript的使用 一般都是簡單的幾個(gè)數(shù)據(jù)提交和驗(yàn)證功能。如果使用 Ruby那樣的動(dòng)態(tài)基于對象 的編程范式編碼顯得有些小題大做,又浪費(fèi)帶寬。JavaScript支持"動(dòng)態(tài)類型語言"的基于對象的編程范式如果JavaScript僅僅支持過時(shí)的面向過程的編程范式,那么 JavaScrip

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論