- - PR -
[VS.NET2005][C#]文字列の比較について
1
投票結果総投票数:38 | |||
---|---|---|---|
Equals()を推奨 | 7票 | 18.42% | |
==を推奨 | 30票 | 78.95% | |
その他 | 1票 | 2.63% | |
|
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-26 14:05
皆さんこんにちは。
別件でEqualsについて調べていたときに「Equals を使うな。使う事を推奨するな。」と書かれたブログを見つけました。 ここで、ちょっと疑問が。 私はC#を勉強するに当たり、河端善博氏の「C#コーディング標準」を参考にしてました。 この中で「オブジェクトの同値比較」はEquals()メソッドの使用を推奨しています。 理由として・・・ 1.もし実装者が Equals()を用意しているなら、それを使ってほしくて実装したはず。 2.String の比較では Option Compare Text に設定されていると大文字/小文字が区別されない。 とあります。 「オブジェクトの同値比較」と「文字列の比較」とは、若干考え方が違うかもしれませんが、上記2.の理由を考えると、==よりもEquals()を使用した方が良いように思えます。 皆さんは、「文字列の比較」に==とEquals()、どちらを使用してますか? 今後の参考にしたいので、できましたら理由なども教えて頂けると助かります。 | ||||
|
投稿日時: 2006-12-26 14:11
String::Compare メソッドの ignoreCase で明示化するのが好きです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-12-26 16:00
[ メッセージ編集済み 編集者: 未記入 編集日時 2007-01-19 19:47 ] | ||||
|
投稿日時: 2006-12-26 16:13
まず最初に
C#では、==演算子は内部でEqualsメソッドを使用しているため、 Equalsメソッドと==演算子は同じ結果を返します。 また、規約についてですが、私自身は推奨理由になっていないと思っています。 1.についてはまったく考慮する必要はなく、 そもそも、実装者の思いに応える為に手段を選ぶべきではありません。 もし、Equalsメソッド実装者の思いを汲んだとして、 ==(op_equality)実装者の思いはいつ誰が汲むのでしょう? 2.についても同様で、 Option Compare Binaryを設定しているのに大文字/小文字が区別されないのなら問題ですが、 意図的に区別していないのであれば、何ら問題ないと思います。 その為に Option Compareステートメントがあるのではないでしょうか? (それ以前に、C#にはOption Compareステートメントはありませんが。。。) この規約については以前読んだことがありますが、 理由が理由として成り立っていない部分が多いため参考にはしていません。 (newやnull代入の説明とか間違ってますし。。。) 私は可読性の観点から==演算子を使用しています。 | ||||
|
投稿日時: 2006-12-26 18:25
本来は、==演算子による比較は参照の比較、Equalsメソッドによる比較は値の比較ですね。
少なくとも、自分でエンティティクラスを作成するときは、これに準拠する (もしくはEqualsメソッドをオーバーライドしない) 必要があります。(これが一般的であるため、それに従わなければ使用者の混乱を招きます。) Stringクラスは特殊なのでこれに準拠していません。(どちらも値の比較) Stringクラスの比較に関する私の意見としては、本来は参照の比較を行う==演算子を使うよりはEqualsメソッドの方が適切だとは思います。 でも、そんなにこだわる必要もないような気がします。(つまり、気にすんな!ってことで) | ||||
|
投稿日時: 2006-12-28 14:27
じゃんぬねっとさん、ぜうすさん、うにくまさん、よこけんさん。
貴重なご意見、有難う御座います。
C#にOption Compareステートメントが無かったのは知りませんでした(汗 今まで存在を気にかけた事が無かった位ですから、考慮に入れるまでもなかったかもしれませんね・・・ こちらに投稿させて頂いた後に、ネットでEquals()についてもう少し検索してみたところ、こちらの掲示板でも書き込んでいらっしゃる囚人さんのHPに辿り着きました。 http://blogs.wankuma.com/shuujin/archive/2006/02/03/21014.aspx こうして見てみると Equals()よりも==演算子を使うほうが間違いが無い!! という気になってきました。 社内では私と同じで、皆Equals()推奨派なので、一度みんなで話し合ってみようと思います。 皆さん、どうも有り難う御座いました。 |
1