1. 無料アクセス解析
PGKissif文消しゴム 2008/3/22

if文消しゴム - Javaとかで学ぶ、すぐに使いたくなる洗練されたプログラムイディオム集

if文が多いプログラムというのは、読みづらいし、テストが面倒だし、バグも発生しがち。少なくとも読みやすくはなるようにする表現を紹介する。こんなプログラムはちょっといやだ。

 1{ // こんなコードをよく見かけるが見苦しい
 2
 3    String ret = getStringThatMayBeNull();
 4    if (ret == null || ret.length() == 0) {
 5        ret = "0";
 6    }
 7    int n = Integer.valueOf(ret);
 8    System.out.println(n * n);
 9}
10

あるはこんなコードもいただけない。

 1{ // あるいはこんなコードも
 2
 3    String ret = getStringThatMayBeNull();
 4    int n = 0;
 5    if (ret != null && ret.length() != 0) {
 6        n = Integer.valueOf(ret);
 7    }
 8    System.out.println(n * n);
 9}
10

プログラムの本題(入力された数値の2乗を求める)とはあまり関係ないif文にはあまり目立ってほしくない。そんなときのために、次のようなメソッドを用意しておくといい。

 1// こういう小さなメソッドを用意しておくと便利
 2public static <T> T altIfIllegal(T value, T illegalValue, T altValue) {
 3    if (illegalValue == null || illegalValue instanceof Enum) {
 4        return value != illegalValue ? value : altValue;
 5    }
 6    return !illegalValue.equals(value) ? value : altValue;
 7}
 8
 9public static <T> T altIfNull(T value, T altValue) {
10    return altIfIllegal(value, null, altValue);
11}
12
13public static String altIfEmptyString(String str, String altStr) {
14    return altIfIllegal(altIfNull(str, altStr), "", altStr);
15}
16

そうすると、次のようにプログラムの本題が主役の座を取り戻す。

1{ // こう書くとすっきりする。
2
3    String ret = altIfEmptyString(getStringThatMayBeNull(), "0");
4    int n = Integer.valueOf(ret);
5    System.out.println(n * n);
6}
7
inserted by FC2 system