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)

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)

Clean Code アジャイルソフトウェア達人の技

Clean Code アジャイルソフトウェア達人の技