ケアレスミスを無くす章

1.5. リテラルの比較

『目的』

リテラルの比較方法を工夫してミスを防ぎましょう。

『Before』

リテラルを右辺として比較しています。

public boolean isHello(String str) {
    return (str != null && str.equals("Hello"));
}

このようなコードを良く見かけませんか?
strが”Hello”と等しいか確認する前にstrがnullでないことを確認しなければなりません。
さもなければstrがnullだとequals()の処理でNullPointerException例外が発生してしまいます。

※リテラル
 定数値のこと。
 プログラム上に直接書かれた数値や文字列を指します。
 通常は、どこかに static final な変数としておくことが一般的です。

private static final String HELLO = "Hello";

『After』

では、リテラルを左辺として比較した場合はどうなるでしょう。

public boolean isHello(String str) {
    return "Hello".equals(str);
}

これだと str が null だったとしても equals() の処理は正しく行われます。
つまり str が null でないことを確認する必要がなくなりますね。

『まとめ』

リテラルの比較方法を工夫することで簡潔なコードを記述できます。
コーディング規約などの縛りがないのであれば適用してみると良いでしょう。

< 前のページへ

Pagetop