国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

弱類型語言比強類型語言的優(yōu)勢、劣勢、分別是什么?能用兩種語言如 PHP 和 C# 舉例論證嗎?

2020-03-22 18:47:00
字體:
供稿:網(wǎng)友
回復(fù)內(nèi)容:寫JavaScript之前聽人說不用理會變量的類型,直接用就好。然后各種進(jìn)坑。。
明明是區(qū)分的好吧,只是語言上不明顯表示出來,另外附帶一些不太智能的類型自動轉(zhuǎn)換。
弱類型語言確實比較好入門,但要想精通還是不能忽略變量類型的。
另外,問題如果能在運行時外解決,干嘛要帶進(jìn)去呢。 最近javascript寫得多深有體會。本來我就知道弱類型語言就是很容易寫出翔,于是我犧牲了一點性能到處assert,加載一個頁面assert了兩千多次,證明效果還是很不錯的。然而,瀏覽器并不會像Visual Studio一樣,可以在任何情況下都非常直接的告訴我,到底哪個assert中了。更可惡的是,像C++/C#這樣的語言,exception被catch的時候是會保留throw的那一刻的debug信息的,javascript直接就先unwind stack了再catch,還得苦逼的展開error對象的內(nèi)容,人肉看stack information,自己跳過去,然而此刻本地變量早就丟了……

特別懷念寫http://ASP.NET的時候,可以用Visual Studio來調(diào)試瀏覽器里的代碼的日子。

php估計也差不多。弱類型不嚴(yán)謹(jǐn),在對類型要求比較嚴(yán)格的情況下就需要注意異常情況:比如接收參數(shù)時需要判斷是int型,但是php收到的全部都可以當(dāng)成字符串,要自己用intval之類的函數(shù)轉(zhuǎn)換;有時候判斷需要“===”才能保證不出問題。c#是不用擔(dān)心這些的,類型不匹配在寫代碼的時候就報錯了。

弱類型的優(yōu)勢有一個很好的例子就是操作json,php用json_decode函數(shù)一下就變成了一個數(shù)組,數(shù)組在php中是萬能結(jié)構(gòu),想怎么用就怎么用。c#解json就有點復(fù)雜了,每一個值都要轉(zhuǎn)換成對應(yīng)類型,就是說你解析之前就要明白里面是什么結(jié)構(gòu),每個值是什么類型。我猜題主其實想問的是動態(tài)類型語言和靜態(tài)類型語言在“嚴(yán)謹(jǐn)”的語言中,通常是預(yù)先定義好一個值的類型,自始至終,變量的類型是固定的。

對比起強類型,弱類型的缺點大概如下:
(1)弱類型不符合“所見即所得”,定義的變量類型是不可預(yù)見并且可以改變的。
(2)為了兼容弱類型,語言執(zhí)行引擎要做了大量的兼容工作,包括類型識別,內(nèi)存管理,類型轉(zhuǎn)換等,增加了語言內(nèi)部處理的復(fù)雜度,會導(dǎo)致執(zhí)行效率的降低。
(3)變量的類型是不可控的,因此執(zhí)行過程中擁有大量的變量類型“隱形轉(zhuǎn)換”,在開發(fā)同學(xué)不清楚隱性轉(zhuǎn)換規(guī)則的情況下,容易產(chǎn)生不可預(yù)知的結(jié)果。這個特性也完全不符合所見即所得的簡單性。

但是,它們之所以可以發(fā)展起來,脫穎而出,也是有原因的,存在就有它的道理。
弱類型等語言特性,降低了程序員編寫語言的門檻。編程言語是人類和機器溝通的橋梁,終極追求其實是“降低人和機器的溝通成本”,追求“人人皆可編程”的境界。
例如,從機器語言的0和1開始,后來變成匯編語言,匯編語言發(fā)展出來C,后來再有現(xiàn)在的腳本語言。編程學(xué)習(xí)的門檻不斷降低,程序員的數(shù)量也隨著指數(shù)增長
而且,我相信未來還會繼續(xù)發(fā)展出更低學(xué)習(xí)門檻的語言,促進(jìn)程序員數(shù)量的再一次指數(shù)增長。

弱類型的語言也有優(yōu)點:
(1)屏蔽了語言的復(fù)雜性和容易導(dǎo)致錯誤的地方,例如:內(nèi)存管理、指針、變量的類型等。雖然,它屏蔽了比較復(fù)雜的特性,但是,并不代表它們不存在,這樣的做法是對人友好(編程更簡單,考慮的東西更少),但是對機器不友好。
(2)項目開發(fā)效率高。
(3)學(xué)習(xí)門檻低。
它雖然帶有不少的問題,但是,也包含了很明顯的優(yōu)點。
PHP比較大范圍地用于Web開發(fā),Javascript統(tǒng)治瀏覽器端的開發(fā),這些都不是偶然現(xiàn)象,而是人用腳投票選擇出來的。

當(dāng)然,術(shù)業(yè)有專攻,不同的語言解決不同場景的問題,不能一概而論。比如fastCSharp,無論是開發(fā)效率還是運行效率,隨時歡迎各位PHPer挑戰(zhàn)。
弱類型語言有兩個優(yōu)勢:一是eval,其實我真的不知道這算不算優(yōu)勢;二是有弱類型需求的情況下,代碼相對于強類型語言更優(yōu)雅(一行少敲幾下鍵盤)。
弱類型語言的劣勢太多太多,可以說滿身都是,只是很多人不愿意承認(rèn)而已。弱類型比較重要的好處主要在于給另一些語言特性的實現(xiàn)帶來的便利性。比如閉包和回調(diào)函數(shù)。PHP我不懂,不過javascript大量依賴的回調(diào)函數(shù)和衍生出來的error first callback pattern等東西,在強類型語言里會不好實現(xiàn)。當(dāng)然也有別的非弱類型實現(xiàn),比如Ruby會用argument as hash之類的手段來回避函數(shù)簽名不一致之類的問題。

之前很多人提到理想中的語言應(yīng)該有optional html' target='_blank'>static typing。其實放到strong/weak typing上或者也是一樣,最理想的是optional weak typing。只是我認(rèn)為除非必要,否則不在編譯期檢查類型,所以應(yīng)該是dynamic typing為缺省,顯式的聲明static typing。而強弱這邊則應(yīng)該是缺省強類型,顯式聲明弱類型(即明確表示內(nèi)容convertible)。

不過目前看來還沒有人整這樣一門語言,XD,現(xiàn)有的湊合著用吧。PHP的優(yōu)勢在于
PHP 是最好的語言
好吧,我再說一遍等于我也有責(zé)任。

PHP是弱類型語言,容易出現(xiàn)什么問題呢?舉個栗子。

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 威信县| 丰顺县| 仪陇县| 凤台县| 霍州市| 泸州市| 株洲市| 利川市| 长海县| 昌平区| 绥化市| 搜索| 定结县| 丘北县| 蒲江县| 朔州市| 泸水县| 荃湾区| 青龙| 思茅市| 新乡县| 泾源县| 伊宁市| 宜川县| 五台县| 盐亭县| 桐城市| 白水县| 宜章县| 阿坝| 阿巴嘎旗| 巴里| 广西| 永平县| 边坝县| 安阳市| 平江县| 常宁市| 赤壁市| 晴隆县| 永德县|