if (常量 == 變數) 的寫法好還是不好?

當我第一次看到 if (NULL == pt) 時,心中有一種說不出的彆扭。一般而言,人們習慣這樣的描述:當一個變數等於某個值時....

把常量寫在前面,無非是防止一種可能誤寫,把== 寫了=時,編譯器可以發現這個錯誤。

真不知道是那種寫法更好啊。不知道你們怎麼想的


不好,因為如果僅僅為了防止單等號造成的錯誤,那麼編譯器警告已經能完成這個操作了。例如,如果你打開了所有的編譯器警告,以下代碼會報錯:

if (pt = NULL)

所以如果真的有上面的意圖,可以考慮寫成:

if ( (pt=NULL) != NULL ) /* C 寫法 */

if ( (pt=NULL), pt ) // C++ 寫法

我們看到,現在的編譯器已經能解決這個問題,因此,對於題主的情況,建議寫成:

if (pt == NULL) /* C 語言寫法 */

if (!pt) // C++ 語言寫法


這習慣不少人都在用,我覺得如果習慣了沒什麼不好(雖然我自己很不習慣),編譯器並不是每次都能發現問題的.


如果這是在java裡面,對於可以用「==」號比較的原子類型,通常還是寫成if(變數==常量)好理解。對於String類型來說,使用if(常量.equals(變數))可以防止一些空指針錯誤,所以java中對於String這種通過函數來比較的的Object類型個人覺得還是使用常量在前變數在後好一點


題目描述不正確。應該是 if ( 常數 == 變數)的寫法好還是不好?

這種寫法的原因是預防程序員粗心,把 == 寫成 = ;

比如說,大意了,寫成 if (NULL = p) ...編譯器會立即報錯。

而如果寫成 if (p = NULL) ,編譯器不報錯,會造成難以發覺的 bug。

--

因此,兩種寫法都存在,這裡不存在什麼好和不好,只是代碼風格和習慣問題。

原因已經明確了,請自己衡量選用哪種寫法適合你。

(有可能採用 p == NULL 派更常見,人數更多),

不要對其他風格抱有太強抵觸。

(我的意思是說,你應該可以沒有障礙的閱讀和採用其他風格的代碼,例如大括弧是否換行,參數類型是否單獨書寫,函數在返回值類型後面是否換行,操作符兩端是否加空格,等等)。

當然,你自己寫代碼時,需要保持一致。當你採用了別人的開源庫,你當然也沒精力去吧別人的代碼風格統一成和你一樣,你哪來那個精力啊?


這樣更不容易錯,但是看上去很噁心,所以我只寫if ( 變數==常量)


必須寫成

if (!pt)


寫成if (name == "Tom")要好。

這個問題在一本書 the art of readable code 裡面提到過。

當你看到

if (name == "Tom")

時,你會理解為:如果名字是Tom

當你看到

if ("Tom" == name)

時,你會理解為:如果Tom等於名字

哪個容易理解是很明顯的。

代碼就像詩,寫出來之後是要給人讀的,可讀性比防止自己出錯更重要。

為了防止自己把==寫成= ,而降低可讀性,我覺得是非常不值的。

我寫了這麼多年代碼,從來沒有犯過把==寫成=的錯誤。


每次編譯加個選項 -Wall -Werror ,編譯器不會允許你寫出if (變數=常量)的。


其實程序語言是講求語感的。為了防止報錯而放棄了語感,等於是撿芝麻丟西瓜。

「語感,是比較直接、迅速地感悟語言文字的能力。它是對語言文字分析、理解、體會、吸收全過程的高度濃縮。語感是一種經驗色彩很濃的能力,其中牽涉到學習經驗、生活經驗、心理經驗、情感經驗,包含著理解能力、判斷能力、聯想能力等諸多因素。」

所以我一直懷疑,提供這些建議的人究竟懂不懂什麼是語感。


哪種你看得爽用哪種,剩下的問題交給現代工具解決


if(i=1){.Oh shit....}-&>if(1==i){...}-&>if(null==i){...}


這種寫法還可以接受,不過看個人習慣了,對寫程序的新手來說可以避免錯誤,就是有時候時間長了,由於疏忽,老手也會犯錯的


這兩種寫法是等價的。if (常量 == 變數)的寫法又能防止低級錯誤,這麼寫有什麼不好?


編程語言不光有c/java之類的,很多腳本語言是沒有各種的檢查的。前一段看thinkphp的代碼,裡面有大量這樣的寫法,不能說是好,只是不得已為之。


if(常量 比較運算 變數) 其實關注的不是變數,而是到底和什麼比較。

這樣寫法的代碼事後讀起來或則調試都輕鬆點,

大家都說不好,我還是膩了。但我不是用C的


據我所知,現在一些編譯器已經可以檢測出 if(變數 = 常量) 這種誤寫了,比如xcode.


推薦閱讀:

哪位大神給解讀一下jdk裡面Map中put方法的一段源代碼?
剛畢業的程序員,如何快速提升實力?
成為網工還是程序員,迷茫?
想去參加JAVA培訓,千鋒,黑馬,動力節點或是其他哪家比較好?
if(x>y)和if(x-y>0)有沒有區別(x,y都是int)?

TAG:程序員 | 編程 | 計算機 | Java | C編程語言 |