顯示廣告
隱藏 ✕
※ 本文為 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 20:47:24
    理論上是第二種,差別單純在於 a如果是null時,不會有NullPointerException 但我覺得微調這個沒有太大意義就是了..
    1F
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇
看板名稱: 確定(Enter) 取消(Esc) 搜尋(Space)
查詢帳號: 確定(Enter) 取消(Esc) 搜尋(Space)
搜尋: m)m文 b)進板 c)未分類 a)作者 /)標題 q)取消?[q]

搜尋 送出(Enter) 取消(Esc)

回覆文章至: f)看板 m)作者信箱 b)兩者皆是 q)取消?[f]
要引用原文嗎? y)引用原文 n)不引用 a)全部回覆 r)複製原文 q)取消?[y]
轉錄本文章於看板: 1)使用連結 2)使用複製 q)取消 ?[1]
轉寄至站內信箱於使用者: 確定(Enter) 取消(Esc)
轉寄至站內信箱於使用者: 確定(Enter) 取消(Esc)
修改文章標題為: 確定(Enter) 取消(Esc)
修改文章標題為: 確定(Enter) 取消(Esc) 全部(a)

確定要刪除這篇文章?(可按大U救回) 確定(Enter) 取消(Esc)

刪除理由:

確定(Enter) 取消(Esc)
加到這個分類: 確定(Enter) 下一層(→) 回上層(←) 取消(Esc)
你覺得這篇文章: 1)真讚 2)真瞎 q)取消?[1] (再選一次即可收回)
你覺得這篇文章: 1)值得推薦 2)表示反對 3)單純註解 q)取消?[3]
guest
預覽(Enter) 取消(Esc)
上傳圖片
按ctrl+Enter可輸入下一行。
guest
確定要送出? 確定(Enter) 取消(Esc) 繼續(e)
搜尋: 送出(Enter) 取消(Esc)

▏▎▍▌▋▊▉ 請按任意鍵繼續