Clean Code:改善(p.28 Listing 2-2)
"Clean Code"*1に掲載されているコード例を、自分なりに修正してみます。
まず修正対象となる元の悪い例。
"Listing 2-1 Variables with unclear context."("Clean Code" p.28)
private void printGuessStatistics(char candidate, int count) { String number; String verb; String pruralModifier; if (count == 0) { number = "no"; verb = "are"; pruralModifier = "s"; } else if (count == 1) { number = "1"; verb = "is"; pruralModifier = ""; } else { number = Integer.toString(count); verb = "are"; pruralModifier = "s"; } String guessMessage = String.format( "There %s %s %s", verb, number, candidate, prulalModifier ); print(guessMessage); }
これは次のように修正するといいんじゃないかと思います。
Listing 2-1' 修正例
private void printGuessStatistics(char candidate, int count) { switch (count) { case 0: print("There are no " + candidate); break; case 1: print("There is 1 " + candidate); break; default: String number = Integer.toString(count); print("There are " + number + " " + candidate + "s"); break; } }
必要なら switch case 文だって使えばいいと思うんですよね。(もしそのほうがわかりやすく読みやすくなるなら。)
"Clean Code" Listing 2-2 では、public class GuessStatisticsMessage を導入して new GuessStatisticsMessage.make(candidate, count); を呼び出すように呼び出し元の printGuessStatistics(candidate, count); をぜんぶ書き換えるようにした例を修正例として掲載しています。でも、printGuessStatistics 関数を書き直すためだけにそこまでするのは、必要ない上に、ちょっとやりすぎじゃないかとも思います。
*1: Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)