- PR -

文字列をequalsで判定する時

投稿者投稿内容
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-02-13 20:19
引用:

あぶぽんさんの書き込み (2008-02-13 17:03) より:
左辺に比較対照がくるという文化って、アジャイル(特にXP)が、
流行りだしてからだと思うのですが、



少なくとも私はそういう観点で意識したことはないですね。

単に「時期は一緒だけど関係ないこと」だと思いますね。
XPのプラクティスにそのような文化は当然存在しません。
なのにどこからXPと関連づいてくるのか。

引用:

未記入さんの書き込み (2008-02-13 19:57) より:
個人的には書くよりも読むほうが多いので、A派の人が増えてくれると助かりますが。



AでもBでもいいですが、NullPointerの考慮漏れのバグは作りこまないで欲しい。
ちゃんと考慮されるならどちらでも構いません。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-13 20:23
引用:

未記入さんの書き込み (2008-02-13 19:43) より:
"literal".equals(var) だって理解できるんじゃないの?



矛盾を突いているところは同意しますが、

理解していることと使用することは別です。

わざわざ書きませんが、
Javaのように比較的構文に自由度のある言語では複雑怪奇な書き方もできるわけです。

※ この場合の複雑怪奇というのは未記入さんが考える複雑怪奇でいいですよ。
  まさか、「str.equals("Hoge")」が複雑怪奇とは言わないでしょ?

ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-02-13 20:27
> なら、"literal".equals(var) だって理解できるんじゃないの?
モンダイの、principalのStringオブジェクトがvarである、という前提では、もう絶対的に
var.equals("literal")ですよ。私の投稿の文は、そうなってるはずですが。

"literal"がprincipalであるコード文脈では、主客がもちろん逆転します。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-13 20:32
引用:

nagiseさんの書き込み (2008-02-13 20:19) より:
XPのプラクティスにそのような文化は当然存在しません。
なのにどこからXPと関連づいてくるのか。



僕はそれ以外に考えられませんでした。

違う人もいることは分かりました。

僕自身がアジャイル(主にXP)を採用してますから、

僕が指摘したかったのは、「B派=アジャイル」ではないということでしたが、
このスレッドでは、それは関係ないのですね。

「A派でアジャイルもあり」というのに、誰も反論してこないですから。

# アジャイルは忘れてください。。。とりあえず、そういう人が来ない限り
OTAKE
会議室デビュー日: 2008/02/08
投稿数: 18
投稿日時: 2008-02-13 20:59
引用:
AでもBでもいいですが、NullPointerの考慮漏れのバグは作りこまないで欲しい。


作りこんでも、単体テストの段階で除去すればいいだけの話です。
その点、Bは例外を隠しやすいので心配です。

例えるなら、catch (Exception e) { // do nothing} みたいなコードかな。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-02-13 21:16
引用:

未記入さんの書き込み (2008-02-13 20:59) より:
引用:
AでもBでもいいですが、NullPointerの考慮漏れのバグは作りこまないで欲しい。


作りこんでも、単体テストの段階で除去すればいいだけの話です。
その点、Bは例外を隠しやすいので心配です。



どんな風に隠すんでしょうか?
まず、if文のブロックの中で該当変数を参照している場合

コード:
if ("hoge".equals(str)) {
  str.charAt(0); // ここで参照している
}



この場合、strがnullの場合にcharAtでNullPointerExceptionが出ますから
例外が隠されることはありません。場所は違ってきますが。

そして、そもそもnull時とそうでないときで処理が分岐する必要がある場合、
ifの分岐でnullの条件を含んだ判断式にしますから、
"hoge".equals(str)という記述にすることと例外が隠されることに因果がない。

"hoge".equals(str)という記述を用いた前提で、
プログラマがどのような誤りをした場合に例外が隠されるのでしょうか?
OTAKE
会議室デビュー日: 2008/02/08
投稿数: 18
投稿日時: 2008-02-13 22:22
引用:
"hoge".equals(str)という記述を用いた前提で、
プログラマがどのような誤りをした場合に例外が隠されるのでしょうか?


いや、例外が発生する例として挙げられたコードで、ifの中でstrを参照してなかったら隠されますよね。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-02-13 23:16
引用:

未記入さんの書き込み (2008-02-13 22:22) より:
引用:
"hoge".equals(str)という記述を用いた前提で、
プログラマがどのような誤りをした場合に例外が隠されるのでしょうか?


いや、例外が発生する例として挙げられたコードで、ifの中でstrを参照してなかったら隠されますよね。



nullの場合にNullPointerExceptionを発生させなくてはならなくて、
かつ、引数の文字列を参照しないケースってどんな場合なのでしょうか?
使わないならそもそも引数に渡さないでしょ。

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