2
我想知道在某些情況下,null對象模式實際上是否會使調試更加困難。例如,如果一個方法返回一個「空」對象而不是null,那麼它不會拋出錯誤。這在可靠,乾淨的代碼方面很好,但是不能代表現在有一個空的對象被使用,基本上什麼都不會導致意外的錯誤。現在沒有任何東西可以幫助找到問題,而不是讓程序員指出問題。null對象模式是否會使調試更復雜?
我想知道在某些情況下,null對象模式實際上是否會使調試更加困難。例如,如果一個方法返回一個「空」對象而不是null,那麼它不會拋出錯誤。這在可靠,乾淨的代碼方面很好,但是不能代表現在有一個空的對象被使用,基本上什麼都不會導致意外的錯誤。現在沒有任何東西可以幫助找到問題,而不是讓程序員指出問題。null對象模式是否會使調試更復雜?
是的它可以因爲如果你的空對象必須返回一個值(如你的例子),你只是推遲null問題,仍然需要檢查空值。
我發現空對象是非常有用的滿足兩個條件。
A 簡單示例是回調。
class Callback {
void onDoSomething(SomeArg someArg);
}
通常你會使用回調
if (callback != null) {
callback.onDoSomething(someArg);
}
與空對象模式,你可以有回調的默認值是一個空對象之前做一個空檢查,避免無效檢查在你的其他代碼中。較少的鍋爐代碼使得查看重要部件變得更加容易。
@BCartolo一些語言(例如Ruby)null是一個可以調用'nil?'方法的對象。如果你的語言不支持這個,你可以在你的設計中將null表示爲一個對象,並確保引用永遠不爲null。 – cyroxis