在相同的if語句中檢查null和檢查對象屬性是否是一種好的做法?在相同的if語句中檢查null和檢查對象屬性是否是好的做法
考慮下面的代碼:
if (jamesBlunt != null && jamesBlunt.isReallyBad()) {
// Don't buy his records
}
這個特殊的代碼是在Java中,我知道從左至右所以在技術上也不會拋出NullPointerException表達式求值,但一般是在這個好習慣任何語言?
在相同的if語句中檢查null和檢查對象屬性是否是一種好的做法?在相同的if語句中檢查null和檢查對象屬性是否是好的做法
考慮下面的代碼:
if (jamesBlunt != null && jamesBlunt.isReallyBad()) {
// Don't buy his records
}
這個特殊的代碼是在Java中,我知道從左至右所以在技術上也不會拋出NullPointerException表達式求值,但一般是在這個好習慣任何語言?
我假設||
是一個錯字,你的意思&&
:)
要回答你的問題:它依賴。
jamesBlunt
是否有意義爲空?如果不是,那麼這將是更好的做法是這樣的:
void buyARecord(Artist jamesBlunt) {
if (jamesBlunt == null) {
throw new IllegalArgumentException("James should never be null!");
}
}
如果是有一定道理的jamesBlunt
爲空,然後你的做法是好的,假設null
和isReallyBad
意思是一樣的語義。如果它們在語義上意味着不同的事物,那麼你可能不應該把它們合併到一行中。
你確實需要小心其他語言。許多(Java,C++,C#等)的行爲方式都是相同的,但有些可能會從右向左評估或懶惰評估。特別注意像Lisp和Scheme這樣的函數式語言,因爲它們傾向於與面向對象的語言(如Java和C#)有所不同。
所做的更改,您是對的,這要感謝您和其他答覆者,問題終於在正確的格式。在我想到的特定例子中,jamesBlunt是無效的。 – zode64 2011-03-28 00:20:32
由於您使用的是OR
聲明,如果jamesBlunt
爲空,將會有一個NullPointerException
。您應該使用and
,因爲如果左語句爲false,則整個表達式將爲false。
用途:
if (jamesBlunt != null && jamesBlunt.isReallyBad()) {
// Don't buy his records
}
當Java 7的出來了,你可以使用快捷鍵
if(jamesBlunt?.isReallyBad() {
// Don't buy his records
}
但在此之前的null
明確的檢查將是最好的做法。 (事實上,這將是最好的做法是不使用對象詹姆仕·布朗特...)
你想用& &,而不是OR。
是的,最好的做法是在相同if語句中檢查null,替代方法(嵌套兩個ifs)很醜,因爲會添加更多縮進。
但之前檢查也行:特別是如果你想做一些錯誤檢查。
就我個人而言,我會分開這些。空檢查是人們在函數開始時要做的事情,通常用來驗證函數參數,通常稱爲「守衛子句」。這些檢查通常會引發異常或返回由該函數定義的錯誤代碼。
這些可以導致下面更清潔的代碼,避免了多層次的嵌套。它還可以防止在需要測試的對象上有其他事情時重複空檢查。
謝謝大家,我已經聽了太多的James Blunt的CD和搞砸的問題一點,我的意思是&&不|| – zode64 2011-03-28 00:09:54