[程式關連]Nullable or Empty

Nullable or Empty

今天是要說

    (1)  if ( FunctionA() == null )

    (2)  if( FunctionA() == string.Empty )

 

在我大腦裡頭的設計原則依序如下:

    1. 減少bug

    2. 增加可讀性

    3. 提昇效能

後來又增加了一項: 易單元測試

至於是程序導向, 物件導向 甚至是服務導向

則沒有一定準則 (case by case).

 

也因為要減少bug, 所以系統內風格的一致性, 變得很重要,

在開始一個系統時, 通常要跟團隊溝通好,

"不要給我回傳 null" "為此付出效能也不打緊" <- 因為不是做device, 所以可以任性

因此, 如果是自己own的方案, 通常不會有什麼問題.

但如果要維護別人的程式, 倒是吃了不少暗虧,

有的PG性情多變, (自己曾經也是, 其實也不太好意思說人家)

有時回傳null, 有時回傳空白,

有時回傳null, 有時回傳空集合 ... Orz

 

當我自以為是用 if( string.Empty.Equals(FunctionA()) ) 時卻發現FunctionA回傳 null ...

不知道為什麼每次遇到這種, 除錯都會花很多時間, 可能是我預設立場, 它不會給我null.

 

而幾個比較常見的:

string 可以null 也可以empty 也可以是Trim()是empty   

Nullable 讓各種型別可以null

    如:int, DateTime …

DBNull 是物件不是null (這個概念很不錯, 用一個常數來代表null)

Collection 可是null 也可以是空集合(會付出一些效能)

 

當然, 有時雖然講好了, 但發生一些案例時, 仍不可避免的得回傳null,

這方面只能用比較消極的辦法, 請伙伴記得在Function前的註解, 一定要標明.

 

最後, 積極的做法, 只要在Unit Test 加入Null 的test case自然可以避掉因Null造成的麻煩,

但每一個 Function 都要考慮 Null 或如果 沒有Unit Test要從頭刻的話, 也是蠻煩人的工作.

 

後記: 感覺這一切都是自己很懶造成的 ...