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 |