顯示廣告
隱藏 ✕
※ 本文為 kewang 轉寄自 ptt.cc 更新時間: 2012-02-02 13:08:51
看板 java
作者 awert ( )
標題 Re: [問題] 關於字串比對的小問題
時間 Tue Jan 31 23:16:35 2012



※ 引述《samtree (嗯....?)》之銘言:
: ※ 引述《awert ( )》之銘言:
: : 理論上是第二種,差別單純在於
: : a如果是null時,不會有NullPointerException
: : 但我覺得微調這個沒有太大意義就是了..
: 對我而言
: 這兩種寫法已經不是哪種較好的問題了
: 第一種寫法根本就是錯誤的寫法
: (當然如果你百分之百確定該字串絕對不會是null)
: 或是你真的需要丟 nullPointerException
:  (不過例外處理的成本比判斷是否為 null 高出許多)

用推文有點慢..


我的想法是這樣子的,這個idiom並沒有問題。

但是,實際寫code時遇到要處理null問題時,

我不會鑽牛角尖考慮哪一種處理null的方式比較漂亮/有效率,

而是要先看為什麼要處理null。

有時候要判斷為null都是因為其他code不必要的動作

舉例來講

public String getString() {
    if (someCondition()) {
        return myString;
    }
    return null; // bad
}

public String getList() {
   if (hasMoreThanZero()) {
        return myList;
   }
   return null; // bad
}

上面第一個method可以考慮使用空字串,第二個則是空list如Collections.emtpyList()
如果是物件,那麼是否能用null object ? 這些都是可能可以改進的地方,
當然,有時候這些東西不是單一一個programmer可以去決定的事,
也不會這麼巧都可以解決,所以我們得乖乖的處理null。

這時,就要考慮到第二點,怎麼處理比較有效率。關於這點,
我認為是不需要考慮,等到是因為這樣而造成效率低落時再說,
更何況其實上面的寫法也只是將判斷丟給String的equals裡面。

第三點是,是否該允許null出現

如果a不該為null,那麼這個idiom不就隱藏了一個可能潛在的問題 ?

最後一點則是比較我個人較龜毛的想法,

SOME_CONSTANTS.equals(a)乍看之下很棒,不需要去處理
可是當實際他人在維護/更改code時,可能會造成一點困擾,
因為code裡並沒有清楚的提醒閱讀者,這個a可能是null。

--
We who cut mere stones must always be envisioning cathedrals.

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.35.186.241
pzyc79:如果只是判斷某字串跟a是否相等,那a是不是null根本不重要1F 02/01 01:22

--
※ 看板: FW 文章推薦值: 0 目前人氣: 0 累積人氣: 182 
作者 awert 的最新發文:
  • +17 Re: [請益] 程式寫太慢.. - Soft_Job 板
    作者: 114.35.186.241 (台灣) 2012-09-22 02:04:40
    你要學會如何解決問題,而不是氣餒。 首先... 沒有人是什麼都會的 ------------------ 當你的主管拿了一份"作業",說要讓你"練習"時,我相信 …
    19F 17推
  • Re: [問題] 關於字串比對的小問題 - java 板
    作者: 114.35.186.241 (台灣) 2012-01-31 23:16:35
    用推文有點慢.. 我的想法是這樣子的,這個idiom並沒有問題。 但是,實際寫code時遇到要處理null問題時, 我不會鑽牛角尖考慮哪一種處理null的方式比較漂亮/有效率, 而是要先看為什麼要處理 …
    1F
  • Re: [問題] 關於字串比對的小問題 - java 板
    作者: 114.35.186.241 (台灣) 2012-01-31 20:47:24
    理論上是第二種,差別單純在於 a如果是null時,不會有NullPointerException 但我覺得微調這個沒有太大意義就是了..
    1F
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇