程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 10大編程語言特性

10大編程語言特性

編輯:更多關於編程

       每種語言都有自己的獨到之處,或奇特的語法,或不常見的函數,或非標准的執行方式。因此,不論新丁還是老手,看著某個特性會突然醉了。文中總結了10個經常被提及的“奇異”特性。

      1. Javascript: + 是一個連接符

      問題描述:

      在JS中,+ 號用在數字間,可以用作常規加法;但如果遇上字符,又可作為字符連接符。例如:'1'+ 1的結果是11。

      成因分析:

      根本性原因是JS屬於弱類型語言。比方說Python,同樣地使用+ 號作為字符連接符,但由於它是強類型語言,一旦發現一個字符與一個整數進行相加,它會提示這是個錯誤操作。

      網友們的看法:

      “問題在於這是個無法預料的強制性靜默轉換,很容易就忽略了。”匿名

      “JS應該就該情況作異常拋出處理。” crgwbr

      “用+來進行字符連接簡直是個噩夢。” Matteo Riva

      2. Perl:模塊必須返回TRUE值

      問題描述:

      絕大多數情況下,Perl模塊在結束時候,都必須以1;語句來結尾,否則,如果最後一條語句的返回值不是TRUE,系統就會報錯了。

      成因分析:

      Perl模塊中包含了初始代碼和子程序。當模塊文件被載入時,Perl會根據是否返回TRUE來判斷代碼是否成功執行。即使沒有初始代碼,Perl仍然期望最後的語句需返回TRUE,否則會報錯。

      網友們的看法:

      “這個通常讓我有不安的感覺。” Drew Hall

      “這是最無實用價值的用法了。”Schwern

      3. C/C++:三字母詞用法

      問題描述:

      舉例來說,系統看到??!會把它自動轉為|,看到??(會轉為[。這很容會引起造成意想不到的結果,並且會大大降低代碼的可讀性。

      成因分析:

      早期進行編程時,鍵盤上還不能直接打出某些特殊字符,例如大括號。因此用了這種間接的方法。

      網友們的看法:

      “博學如谷歌,也一定看不懂什麼是??!??!” Isaac

      “自1977年有了三字母詞,C就變得晦澀難懂了。”Martin Beckett

      4. PHP:大小寫敏感處理

      問題描述:

      PHP對大小寫處理比較混亂,有些地方區分,有些地方不區分。例如:變量名,常量名區分;函數名,方法名,類名不區分。

      成因分析:

      很可能是PHP從CGI腳本集發展成成熟編程語言過程中出現的人工產品。

      網友們的看法:

      “這是為什麼PHP程序員習慣用下劃線進行函數命名,而不是采取駝峰命名法的原因。”paperstreet7

      “在PHP中,一切皆有可能!”Grzechooo

      5. Ruby:0作為真值

      問題描述:

      在Ruby中,0值等同於TRUE值。這對有C,Python基礎的程序員來說不可不謂是一場噩夢。

      成因分析:

      只有布爾值FALSE和nil等價於FALSE,其余的都等同於TRUE。0與1,2,3等都會被相同對待。

      網友們的看法:

      “這簡直是讓人抓狂,雖然初衷是善意的。”Chris Lutz

      “0==true!我這個C語言腦袋都快崩潰了!”Kenny

      6. Python:以空格數進行層次劃分

      問題描述:

      不同於采用關鍵字或標點符,PY中采用縮進層級來進行層次劃分,以明確每一行代碼的位置。不正確的空格數(或空格和換位符數不一致)都可能造成程序報錯。

      成因分析:

      PY作者的意圖是希望代碼更為可讀,減少不必要的輸入,並希望程序員本身應該承擔起維護代碼清晰度的責任。

      網友們的看法:

      “由衷地說,這是使我對PY敬而遠之的根本原因。”wazoox

      “如果我們真的需要類似的強制機制,我們是不是真的太懶了!”Joris Meys

      7. C:數組索引工作模式等同於指針

      問題描述:

      在C中,a[i]和i[a]是可以互換的,兩個寫法都能得出一樣的結果。

      成因分析:

      在C中,對內存塊而言,數組與指針是無差別的,就是說:

      a[i] = *(a + i) = *(i + a) =i[a]。

      網友們的看法:

      “在C語言混亂代碼比賽中,這毫無價值可言。”Confusion

      “我想這正正揭露了C語言的核心,指針和更直接地與內存打交道。”Michael Neale

      8. Perl's:預定義變量

      問題描述:

      Perl有一份很長很長的特殊變量列表,裡面的名字都是十分繁雜的(盡管有對應的長英文單詞)。因此,除非是Perl資深開發人員,否則反復翻閱Perl文檔是常有的事。

      成因分析:

      這些變量都有不同的含義,例如:進程ID($$),錯誤信息($@),正則表達式匹配($^R)。

      網友們的看法:

      “十分令人懊惱!”MatrixFrog

      “對精簡型開發者可能是福音。”niXar

      “這些變量的問題是:無法通過谷歌查找得到!” malvim

      9. JavaScript:自動分號插入

      問題描述:

      JS使用分號作為語句結束的標志,並且會自行插入,即使是代碼斷行的情況。因此會常常導致錯誤的出現。

      成因分析:

      自動化的本意是為了帶來便利,特別是對新手來說。

      網友們的看法:

      “如果我們設計語言的特性時,老把用戶看成是傻瓜,那是會出問題的。”Rob Van Dam

      “自動分號插入是JS最讓人頭疼的地方之一。” fennec

      10. Java:自動裝箱(autoboxing)與Integer緩存

      問題描述:

      Java會自動把基礎類型數據轉為對象(自動裝箱),例如把int轉為一個Integer對象。同時默認地,緩存Integer對象的取值為-128到127。這樣的話,在使用==來比較兩個相同取值Integer對象時會出現問題(在-128和127之內是TRUE,其余的是FALSE)

      成因分析:

      自動裝箱機制減少了代碼輸入量,同時Integer緩存提升了處理速度。

      網友們的看法:

      “還好我只是一名C#程序員。” Will

      “這不算什麼錯誤,反而給了我們一個使用原始類型(如:booleans)進行數字處理的理由。”RaviWallau

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved