- 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%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-04-05 18:39
引用:

あぶぽんさんの書き込み (2007-04-05 18:10) より:
しかし、equals()というメソッドにするというのは、
美しさという観点から考えるとやはり美しくないと思います。



美しさは主観によるところなのでそこは触れませんが…
参照の比較なんて絶対に使わないよ!という前提でならオブジェクト型の
==が内容の比較でもいいとは思いますけども。

整合性で言えば

プリミティブ型 : ==で内容比較
オブジェクト型 : ==で内容比較、===で参照比較

とかのほうが綺麗なのかもしれませんね。

私は演算子オーバーロードはメリットよりもデメリットが大きいように思います。
常に演算子の挙動がオーバーロードによって変えられている可能性を
考えながらコードを書くなんて…
反EoDな考え方のように思うのですよね。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-04-05 18:40
演算子オーバーロードを導入すると、
(a == b)が(a.equals(b))になると思いますが、
aがnullだったら・・・とか考えると、結構微妙です。

現にenum型のnullをswitch構文に渡すとNPEがスローされますね。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2007-04-05 18:47
nagiseさん、ラッシュでしたね。。。先ほどの書き込み見ていただけたでしょうか?


引用:

プリミティブ型 : ==で内容比較
オブジェクト型 : ==で内容比較、===で参照比較


その意見、賛成!!

引用:

私は演算子オーバーロードはメリットよりもデメリットが大きいように思います。
常に演算子の挙動がオーバーロードによって変えられている可能性を
考えながらコードを書くなんて…
反EoDな考え方のように思うのですよね。


ええ、言葉不足でした。
演算子のオーバーロードを導入するのではなく、

「==」演算子を独自に定義できて、定義されていない場合は「==」で比較できない

という仕様です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-05 18:54
引用:

== と === 演算子


それ、なんて Script 言語? (w

Java では断固反対ですね。
今のシンプルな言語仕様の方が性に合っているでしょう。

反対意見は多いと思いますよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-04-05 19:00
引用:

あぶぽんさんの書き込み (2007-04-05 18:47) より:
ええ、言葉不足でした。
演算子のオーバーロードを導入するのではなく、

「==」演算子を独自に定義できて、定義されていない場合は「==」で比較できない


Syntax Sugarの追加ですね。
確かにあってもおかしくはないと思います。
すでにStringの場合の+演算子で導入されてますし。

===の場合は、左辺.equals(右辺)の呼び出しと等価とする、でしょうね。
==の挙動を変える事は、互換性的にも簡潔さ的にも望ましくないと思います。

Javaの場合、==はプリミティブ型でも、参照型(実質的にアドレスです)でも、
それぞれの式の値そのものを比較する、という仕様で統一されていますし。

#昔どこかで同じような話を見かけたような??気のせい?
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-04-05 19:07
JavaScriptと同じ、===(厳密演算子)をJavaに導入するのは、
悪くないとは思うんですけどね。
ただ、=== としたいのに、間違って == にしても、パッと見
では判断しにくくなってしまうかもしれないですね。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2007-04-05 19:08
じゃんぬねっとさん、

「===」はやりすぎでしょうが、
言語仕様でなんとかしたいという意味です。。。

Rubyなんかは結構、記号を使っちゃってますけど、
JavaはSmalltalkの流れも汲んでますから、記号過多はいやがられそうですね。

前々回のコメントでサンプルコード書きましたが、
getterとかsetterとかをガチガチの関数記述にしちゃうと、
可読性が悪くなるんですよね。

僕はSmalltalk偏りですから、本当はSmalltalkならと思ってしまいがちです。。。

上記、宗教論的なのでお手柔らかに
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2007-04-05 19:13
String#equals()に変わるものを提案してもいいんじゃないか?

ということで、化けてるところに投票しました

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