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)?