- - PR -
String#equals()を明示的に使うべきか?
投票結果総投票数:55 | |||
---|---|---|---|
必ず使うべき | 52票 | 94.55% | |
使うべき | 0票 | 0.00% | |
使ったほうがいい | 0票 | 0.00% | |
場合による | 1票 | 1.82% | |
どちらでもいい | 0票 | 0.00% | |
使わなくていい | 0票 | 0.00% | |
使わないほうがいい | 0票 | 0.00% | |
|
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-05 16:08
比較的大規模なプロジェクトには比較的新人が投入されやすいので むしろ探すと多く発見できるかもしれませんね あぶぽんさんの発言からすると今回は意図的にやってたようですが… いくらstatic finalな定数だったとしても一抹の不安がありますね。 むしろインライン展開されるstatic finalな定数だから余計に不安なのかも。
そりゃぁもちろん。 たとえば100,000文字の長さからなる文字列の「値」が等しいことをチェックするには どうしたらよいでしょう? 正解はString.equals()のソースコードを覗いてみてください。 Stringの「参照」の比較は常に一瞬で終えれますよね。 | ||||||||||||
|
投稿日時: 2007-04-05 16:41
nagiseさん、
意図的は意図的なんですが、それは テストケースが通ったからであって、参照が同じになるという 確信があってのことではないので、そこが不安なのです。
そのとおりですね。今回は比較的短い文字列だったのですが、 規約として許してしまうと長い文字列を書く人もいるでしょうから。。。 いづれにしても、定数を文字列にして、「==」で比較するというのは、 危険な賭けだと思います。 規約で許すべきではないですね。ね? ログ運用は別の方法を考えるよう提言します。 今期からはJava5のenumが使えるので徹底します! | ||||||||||||
|
投稿日時: 2007-04-05 17:17
せっかく型の強い C# (.NET/CLR) を使っているのであれば、 タイプセーフでない Equals メソッドは使わない方が良いです。
== 演算子は参照が比較されるのではなく、文字列の値が同じ内容かどうかが比較されます。 だから使わないのです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-04-05 17:36
自分でスレッド立てておいて、勝手なことを言わせてもらえるとしたら、
String#equals()は美しくないから使いたくない! です。 演算子の多重定義は確かに問題が多かったですが、 「==」の多重定義(というか二重定義)はすべきだったと思います。 理由は、美しくないからです。 勝手なこと言ってすみません。。。 | ||||||||||||
|
投稿日時: 2007-04-05 17:59
そうすると参照の比較と値の比較で違う演算子が必要になりますね。 == と ===とでもしますか? 使い分けが必要なことは変わりますまい。 | ||||||||||||
|
投稿日時: 2007-04-05 18:10
nagiseさん、
そこなんですよね。 C++やってたころはそう思ってたんですが、 参照の比較をすべきところって結構少ないと思うんです。 かと言って、すべて値の比較でいいか、値の比較しかできなくていいか といわれると、ちょっと考えます。 しかし、equals()というメソッドにするというのは、 美しさという観点から考えるとやはり美しくないと思います。 許せる範囲かどうかは人によって違うかと思いますが、 今、目の前にある大量のソースコードを見て、 「全部、equals()に書き直せ!」と、大声ではいいづらいですね。 間違っててもキレイだから。。。ちゃんと動くし。。。 | ||||||||||||
|
投稿日時: 2007-04-05 18:21
演算子のオーバーロードを導入しますか? 多少便利になりますが、不要なまでの複雑さも導入してしまいます。 言語仕様の性格からして、理想主義なJavaと現実主義のC#。 どちらでも好きな方を選べばよいのではないでしょうか。 | ||||||||||||
|
投稿日時: 2007-04-05 18:39
あしゅさん、いつもありがとうございます。
理想主義的に言い換えると、 プリミティブ型とか参照型とかいう区別をなくしたい というところでしょうか。
と書いてみたら、結構、美しい気もするのですが、 現実のコードに毒されてます。。。 ※火をつけちゃいました |