你寫的代碼真的對嗎?

已邀請:

馬天宇微博

贊同來自:


俗話說,文無第一,武無第二,作為程序員,也很難比出高低,但是代碼的質量去可以讓人一眼看出水平的高低,有些代碼不僅僅是質量不好,運行效率低,甚至在一些情況下會導致系統的錯誤。


還記得幾年前,項目經理發信說過,需要做defense coding,就是預防代碼發生不可預見的錯誤。那麼讓我們來看看一下代碼的區別。


代碼范例1:


String configurationName = "BackDoor";


String configureValue = getConfigurationValue(configuratoionName);


if(configurationValue.equals("BackDoorDirty")){


//Let's do some dirty things


}


這段代碼可以寫的更好一些嗎?


答案是肯定的,應該有不少人知道,name 和 value應該定義為一個常量。


final static String configurationName = "BackDoor";


final static String DIRTY_BACKDOOR = "DirtyBackDoor";


String configureValue = getConfigurationValue(configuratoionName);


if(configurationValue.equals(DIRTY_BACKDOOR)){


//Let's do some dirty things


}


這樣一來至少在其他的地方需要做dirty things的時候,不需要重新定義name 和value的值,同時也不會擔心因為拼寫的錯誤導致程序不能正常運行,那麼這樣寫真的對嗎?會有問題嗎,肯定會有的。


因為getConfigurationValue(configuratoionName),這個方法無法保證返回以個值,這個方法可能是第三方提供的方法,也可能是自己的代碼,要保證configurationValue.equals(DIRTY_BACKDOOR)可以正常運行的前提是,他不會返回一個null值。看來我們需要把代碼改稱


final static String configurationName = "BackDoor";


final static String DIRTY_BACKDOOR = "DirtyBackDoor";


String configureValue = getConfigurationValue(configuratoionName);


if(configureValue!=null && configurationValue.equals(DIRTY_BACKDOOR)){


//Let's do some dirty things


}


這樣就做到瞭我前面提到的defense coding,這樣寫的確對瞭,但是並不是很好的代碼習慣,讓我們看看以下的代碼如何:


final static String configurationName = "BackDoor";


final static String DIRTY_BACKDOOR = "DirtyBackDoor";


String configureValue = getConfigurationValue(configuratoionName);


if(DIRTY_BACKDOOR.equals(configurationValue)){


//Let's do some dirty things


}


這樣一來,我們既不需要去做那個null的檢查,也完全可以避免configurationValue是null造成的異常。

要回復問題請先登錄註冊