Kox Blog

バグを知り、業務を知らば、システム危うからず

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  243  : 記事  0  : コメント  929  : トラックバック  35

ニュース

書庫

日記カテゴリ

リンク

ネタ元:if条件判定はどちらがよい?(以前のブログエントリ(古い))
    :文字列をequalsで判定する時(@IT)

いままで、僕は以前のブログに書いてあるように、
if(変数.equals("定数"))
のほうが、
if("定数".equals(変数))
より保守の観点では優れていると思っていました。
しかし、この考えが120度くらい変わってしまったので、
再エントリをすることにしました。

どちらのケースでも
nullの対応がきちんと行われているのであれば、それほど問題となりません。
しかし実際にはnullの考慮をし忘れて、不具合となるケースが少なくありません。


以前までの僕は、以下のように考えていました。
if(変数.equals("定数"))
を使用していれば、その箇所でNullPointerExceptionが発生するため安全です。
if("定数".equals(変数))
を使用してしまうと、nullの場合に処理をしないだけなので、
処理は正常に動作し、最悪の不具合の場合にはデータの破損や、
不具合箇所の特定が困難になります。


そして以下が考えを改めた理由です。
単純に
if(変数.equals("定数"))と使用していれば、
上記のようにバグはその時点でNullPointerExceptionが発生し問題ありません。
しかし多くの場合は、
if(変数!=null && 変数.equals("定数"))
と書かかれています。
まるで、枕詞のように頻繁に。
であるならば、
この書き方は、
if("定数".equals(変数))
と等しく、以前までの僕が懸念してきたことは、
まったく意味のないものとなってしまいます。

どちらの場合でも同じような懸念が残ってしまうのです。


意図的に
「変数!=nullを使わないようにし、変数.equals("定数")のみで記述するようにすれば・・・」
とも思いましたが、
そもそも意図的に「変数!=nullを使わない」部分に気をつけるのであれば、
「null時の対応を考慮し忘わすれない」部分に気をつけるべきなのだろうと考えました。

if(変数.equals("定数"))
if("定数".equals(変数))
比較したとき、
今までの考えと変わらず前者が安全だと思っています。
しかし
if(変数!=null && 変数.equals("定数"))
if("定数".equals(変数))
比較したとき、
後者のほうが分かりやすいと、僕は考えます。


考えた末出した結論は、
ケースバイケースで。
・・・
・・・
結論になってないですね。

どちらにしろ、この手の記述がある際には
その状況などを考慮し注意する必要があるぞと、
胸の奥にとどめておく程度でよいかと思います。

投稿日時 : 2008年2月15日 18:03

コメント

# re: if条件判定はどちらがよい? (その2) 2008/02/15 20:14 まどか
Equalsのほうに目を向けてみては。
つまり、インスタンス.Equals>インスタンスありき。
で、仕様における主語はインスタンスのほうだと思います。
#「AがBと等しいか」→A.Equals(B)
これにNullが意味を持つかどうかが絡みますので、A!=null && A。Equals(B)に違和感はありません。
nullのチェックは仕様上書くべきかは意識する必要があると思います。

# re: if条件判定はどちらがよい? (その2) 2008/02/16 2:08 かつのり
自分はアッチではstr.equals("string")派と書きましたが、実は"string".equals(str)もやります。
やるといっても、後続の処理でもnullを許容して区別して処理したいけど、
今は値が"xxxx"であるかと評価したいときにやります。
NPEを回避する目的ではないですね。

# re: if条件判定はどちらがよい? (その2) 2008/02/18 13:04 kox
>#「AがBと等しいか」→A.Equals(B)
これはもっともだと思います。
しかし、僕が重要視しているのは、
「不具合時でもデータの安全は守られるか」や
「不具合時に問題箇所をいち早く知るためには」を
意識した際にどうなのだろう?ということです。


# tcLlsaBeGUOKjcgYvI 2011/12/22 21:26 http://www.discreetpharmacist.com/
TyfBHH Thanks for the article! I hope the author does not mind if I use it for my course work!...

# NqAtLFfSxPH 2012/01/04 4:48 http://www.kosherbeefjerky.net/
Yf8UcR I decided to help and sent a post to the social bookmarks. I hope to raise it in popularity!!...

# XAZUwKWSIpuz 2012/01/07 13:44 http://www.luckyvitamin.com/p-20762-yogi-tea-cold-
Totally agree with you, about a week ago wrote about the same in my blog..!

Post Feedback

タイトル
名前
Url:
コメント