[ Java ] 初心者のオヤジが教えて欲しい String.equals の流儀

Pocket

Java の文字列一致判定における String.equals の使い方について色々な意見があるようです。すでに結論が出ているのか、いないのかはわかりませんが、アラフォーにしてはじめて Java をやる羽目になったおっさんは血気盛んな若者たちに教えを乞いたいのです。

スポンサーリンク

今回の議題

    String str = new String("value");
    
    // 引数にリテラル派?
    if(str.equals("value")) { ・・・・ }

    // 引数にオブジェクト派?
    if("value".equals(str)) { ・・・・ }

ありそうな意見

  • str が null の場合だと、java.lang.NullPointerException が発生するので 引数にリテラルを持ってこないほうが良い。 それに、ほとんどの場合 str が null の時は一致していない場合と同様の処理をするんだし。
  • ソースコードで if (str != null && str.equals(“value”)) { } のように記述してあった方が null は駄目なんだなと ハッキリわかってわかり易いとおもう。
  • 結局 null の時はどうするのか次第なような気もする。null を許容するのかしないのか? しないのであれば、例えば関数 ( メソッド ) の中で例外を発生させるのか、呼び出し元で null ではないと保証するのかなどケースごとに考える必要がある。
  • 例外が発生しないという事実だけを覚えてるプログラマが、盲目的に if (“value”.equals(str)) { } のような記述をしているのが 一番の問題だな。
  • それは、if (str.equals(“value”)) { } でも同じこと。だけど、例外が発生してくれる分だけ問題が早期に見つかる可能性が高いのでまだましかも。
  • そもそも、null のときどう動作するとか前提も何もないのに議論できるわけないだろ。書き方だけならコーディング規約でもなんでも決めて守ればいいけど、null のときどうするかなんて、プログラムミス ( バグ ) なのか、エラー処理するのか、許容 ( 無視 ) するのかにもよって違うだろ!!

Java 初心者アラフォーの感想

結局のところは、書き方の違いよりもプログラマのスキルの問題に話が流れて行ったりすることが多くありそうです。また、その判定を何のためにやっているかという前提も何もないまま書き方だけの語論をしても無意味なような気はします。そのため String.equals の書き方 ( 使い方 ) の正しい正しくないといったこと自体を議論するのには違和感を感じます。

if 文でコンパイルエラーが見つかりやすいのでリテラルは左辺に書くべきだとか、可読性 ( 決定権のある人にとっての可読性 ) が悪いのでリテラルは右辺に書くべきだとかと雰囲気が同じような議論のネタと同じ臭いがします。

しかし、真剣に自分の思いを伝えようとする ( それが、自分の優位性を証明しようと頑張っているだけであっても ) こと自体には意味はあると思います。結局のところ傍観して考えることを放棄している人間よりはよっぽどスキルは高いと思います。

そして、「 まあ、そんなことどーでもいいから、終わってない仕事片付けろ 」 っていって考えることを放棄するようになるとエンジニアとしては引退時です。

みなさん、どう考えますか?

先日からアドセンスやヤフーの広告が楽天の「ザ・聖水美少女」「超熱六十路妻百花」など、完全にアダルト広告なんですが。。心当たりはあるんですが。。。

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *