- PR -

文字列をequalsで判定する時

投稿者投稿内容
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-02-14 10:32
引用:

あぶぽんさんの書き込み (2008-02-14 10:11) より:
引用:

カーニーさんの書き込み (2008-02-14 09:43) より:
コード:
if (str != null && str.equals("")) {
  ...
}


とか書きたくないし、



これだけ長いと読んでいなくても仕方ないですが、
その話はもう終わってます。

 「if (str.equals("Hoge")) 」
 「if ("Hoge".equals(str)) 」

の比較で十分です。

コードの長さは同じですね。



どの投稿で終わっているのでしょうか?
私は全部の投稿を一応読んでいますが、終わっていなかったと思っています。
(無駄に長いスレなので私が見落としているだけかもしれません)

strがnullを許可する場合、

(1) str != null && str.equals("")
(2) "Hoge".equals(str)
(3) str.equals("Hoge")

(1)(2)の二つは等価ですが、(3)は違いますよね。

strにnullを許可しないことを前提とした場合の議論は進んでいますが、
strがnullを許可する前提ではどうか?という話については、
それぞれにどんなメリットがあるか?という話はなかったと思います。

少なくともあぶぽんさんはA派と宣言されていますが、(1)と(2)の比較については
言及されていなかったと思うのですが、違いましたか?
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-14 10:33
引用:

nagiseさんの書き込み (2008-02-14 10:01) より:
危険性の考察はよくされているけども、具体的に痛い思いをしたという
話が挙がってこないことを鑑みれば、実は定数を左に置くことで
例外隠しが起こるってのは都市伝説じゃないの、と疑っている。



文脈が違うことを承知であえて書きます。

僕は具体的に痛い思いを数度(3、4回?)しています。

すべてに共通していることを。。。

まず、

 1.コーディング時に気持ち悪いことを強要される。

これは、「気持ち悪い」のは主観であって、
B派がコーディング規定であったためですから、主張からは外します。

 2.事前にエラー処理(この場合、str == nullなら例外をスロー)を
  行なっていない箇所が散乱しており、検出に手間取った。

これは、B派の中でエラー処理は別途考える人には関係ない話。

 3.テストの際、設計書と見比べづらいとテスターからクレームがきた

このあたりが、「読みやすい」「読みやすくない」が主観ではないと
主張したいところです。

しかし、設計書に「"Hoge"がstrであること」と書かれていた場合は、
問題ないと思いますので主張から外します。

これが、設計ミスだとまではいいません。
いろんな要件がありますから、有り得ないことではないと思います。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-02-14 10:37
あまりにもマニアックな話題に突っ込んでますんで
このあたりは自分のblogとかで考察することにします。

あぶぽん氏に確認したいのは
引用:

プログラム的には"red"の場合だけifの中を通したいのだから、
"red"と等しいものを探して通すって考え方ならむしろ自然なのでは?


という部分について、どのようにお考えですか?
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2008-02-14 10:37
引用:

あぶぽんさんの書き込み (2008-02-14 10:11) より:
引用:

カーニーさんの書き込み (2008-02-14 09:43) より:
コード:
if (str != null && str.equals("")) {
  ...
}


とか書きたくないし、



これだけ長いと読んでいなくても仕方ないですが、
その話はもう終わってます。

 「if (str.equals("Hoge")) 」
 「if ("Hoge".equals(str)) 」

の比較で十分です。

コードの長さは同じですね。


いや、別に""と"Hoge"の違いを提起したかったわけじゃないんですが・・・。

僕はnull考慮漏れどうこうは全く気にしていなくて、やりたいことが非常にささいなのに、それに見合ったコード量にならないのは好きじゃないというだけの理由で、文字列リテラルを左側に置いてますよ、という立場を表明しただけのことです。

引用:

思考の妨げになるのは、順序のほうですね。


「どちらが自然と感じるか」とか、
「どちらが保守しやすいか」など。。。


自然に感じるのは「str.equals("Hoge")」のほう、保守しやすい(≒読みやすい)のは「"Hoge".equals("")」のほう。これは僕個人の意見です。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-14 10:41
引用:

よねKENさんの書き込み (2008-02-14 10:32) より:
どの投稿で終わっているのでしょうか?


4ページの終わり、かつのりさんの発言です。

ちなみに僕は、その後から参加していますので、
僕の発言はすべてその前提です。

テクニック過剰なことに応戦して横道にそれたり、
XP教などこのスレッドにはいないのに批判したり、

何度も横道にそれていますが、
アサーションとエラー処理は別途考慮するということに

反論されていた方っていましたか?
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2008-02-14 10:44
引用:

あぶぽんさんの書き込み (2008-02-14 10:41) より:
引用:

よねKENさんの書き込み (2008-02-14 10:32) より:
どの投稿で終わっているのでしょうか?


4ページの終わり、かつのりさんの発言です。



そうか! nullを無害化すればいいのか!

コード:
if (str == null) {
  str = "";
}

if (str.equals("")) {
  ...
}



#ジョークです・・・
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-14 10:46
nagiseさん、

マニアックですねぇ〜。。。好きなんです、こういうの(*^_^*)

引用:

あぶぽん氏に確認したいのは
引用:

プログラム的には"red"の場合だけifの中を通したいのだから、
"red"と等しいものを探して通すって考え方ならむしろ自然なのでは?


という部分について、どのようにお考えですか?



全面的に賛成です。

その場合、設計書もそれなりの考えに基づいた文章になっていないといけませんが、
具体的にどう書けば良いのかちょっと思いつかないです。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-14 10:49
まったく別の話題になってますが。。。

引用:

カーニーさんの書き込み (2008-02-14 10:44) より:
そうか! nullを無害化すればいいのか!

コード:
if (str == null) {
  str = "";
}

if (str.equals("")) {
  ...
}



#ジョークです・・・



おもしろいですヽ(^。^)ノ

実際、ありました、そういうの。。。

スキルアップ/キャリアアップ(JOB@IT)