『Javaルールブック』

TwitterのTL上で本書に関するツイートを何度か見かけて気になっていたので、本屋でパラパラ見て「これは会社に一冊あると良さそうだ」と思い、勤め先用の書籍として購入して貰いました。

Javaルールブック ?読みやすく効率的なコードの原則

Javaルールブック ?読みやすく効率的なコードの原則

本書は、良いコード(=保守しやすい)を記述するためのルールを中心に、そのルールの違反例と修正例のコードと説明が掲載されており、スッキリとした構成でとても読みやすかったです。

ルールについても全体的にフムフムと同意できる、または参考になる内容ばかりだったのですが、1つだけ自分が「ん?」と引っ掛かったのが『2.10.4 文字列リテラルと変数を比較するときは、文字列リテラルのequals()メソッドを利用する』というルールです。

どういうことかというと

if (str != null && str.equals("Y")) {
  // 省略
}

よりも、

if ("Y".equals(str)) {
  // 省略
}

を使うことを推奨するということです。

前者だとnullチェックを行う必要があり、nullチェック漏れのリスクを回避できるという理由で後者が推奨されています。

テクニックとしてこういう方法があるのは知っていましたが、自然言語の順序として何となく気持ち悪さを感じてしまうので、私は前者を使っています。(変数を文字列リテラルと比較するのか、文字列リテラルを変数と比較するのかでいうと前者の方がしっくりくる)

この話題について、ここ数年の間にどこかで大議論が行われているのを見た記憶があるけど、それがどこだったか思い出せず。

その議論に決着が付いたのかも記憶にないのですが、どなたか知ってる人がいれば教えてください。。