首頁 >後端開發 >PHP問題 >令程式設計師費解的10個語言特性

令程式設計師費解的10個語言特性

伊谢尔伦
伊谢尔伦原創
2016-11-25 09:59:251580瀏覽

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

    1. Javascript: + 是一個連接符

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

  成因分析:

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

  網友們的看法:

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

  「JS〜該情況。 +來進行字元連接簡直是個惡夢。 ,如果最後一條語句的回傳值不是TRUE,系統就會報錯了。

  成因分析:

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

  網友們的看法:

  「這個通常讓我有不安的感覺。」 Drew Hall

  「這是最無的用法了。

  問題描述:

  舉例來說,系統看到??!會把它自動轉為|,看到??(會轉為[。這很容會引起造成意想不到的結果,並且會大大降低代碼的可讀性。 「博學如Google,也一定看不懂什麼是??!??!」 Isaac

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

  4. PHP:大小寫敏感處理

  問題描述:

  PHP對大小寫處理比較混亂,有些地方區分,有些地方不區分。成因分析:

  很可能是PHP從CGI腳本集發展成成熟程式語言過程中出現的人工產品。採取駝峰命名法的原因。 。 2,3等都會被相同對待。快崩潰了!的位置。希望程式設計師本身應該承擔起維護程式碼清晰度的責任。的強制機制,我們是不是真的太懶了! ”Joris Meys

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

  問題描述:

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

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

  8. Perl’s:預定義變數

  問題描述:

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

  成因分析:

  這些變數都有不同的意義,例如:進程ID($$),錯誤訊息($@),正規表示式符合($^R)。

  網友們的看法:

  「十分令人懊惱!」MatrixFrog

  「對精簡型開發者可能是福音。」niXar

 「對精簡型開發者可能是福音。」niXar

9. JavaScript:自動分號插入

  問題描述:

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

  成因分析:

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

  網友們的看法:

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

  「自動分號插入是JS最讓人頭號插入是JS最讓人頭號插入是JS的地方之一。一個Integer物件。同時預設地,快取Integer物件的取值為-128到127。這樣的話,在使用==來比較兩個相同取值Integer物件時會出現問題(在-128和127之內是TRUE,其餘的是FALSE)

  成因分析:

  自動裝箱機制減少了程式碼輸入量,同時Integer快取提升了處理速度。

  網友們的看法:

  「還好我只是一名C#程式設計師。」Will

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn