書くべきコード。
おかしくないコードの条件を考えてみました。
- ちゃんと動く。
- 無駄なことをしていない。
- 読みやすい。
こんなところでしょうか。
昨日もちらりと触れましたが、最近話題のFizzBuzz問題が一番分かりやすい例になるかも知れません。さっそくJavaで作ってみました。(インデントが消されてしまって見づらいかも知れません。すいません。)
public static void main(String[] args) { StringBuffer sb = new StringBuffer(); for (int i = 1; i < 100; i++) { String s = String.valueOf(i); if (i % 3 == 0 && i % 5 == 0) { s = "FizzBuzz"; } else { if (i % 3 == 0) { s = "Fizz"; } else if (i % 5 == 0) { s = "Buzz"; } } sb.append(s); sb.append("\n"); } System.out.println(sb.toString());
多分、一番基本的なアプローチをしていると思います。ただし、FizzBuzzに対して制約をかけてちょっとした工夫を強いてみる、という趣向もあるようなので、例によって剰余を禁止してみました。
public static void main(String[] args) { int key3 = 3; int key5 = 5; int key3and5 = 3 * 5; StringBuffer sb = new StringBuffer(); for (int i = 1; i < 100; i++) { String s = String.valueOf(i); if (i == key3and5) { s = "FizzBuzz"; key3and5 += 15; key3 += 3; key5 += 5; } else { if (i == key3) { s = "Fizz"; key3 += 3; } else if (i == key5) { s = "Buzz"; key5 += 5; } } sb.append(s); sb.append("\n"); } System.out.println(sb.toString()); }
前者と後者、どちらが優れているかというと、その答えを考える前にまず「どの評価基準での優劣か」ということを考えなくてはなりません。コードの評価の難しい点はそこにあります。(故に、痛いコードが生まれるのでは、と思います)
- 実行時間
- 実行中に使用するメモリ
- 可読性
- 変更し易いか
現場では、冒頭で書いた3点に加え、こういった観点での評価をする必要があります。凄く高度である事は求められませんが、それは評価する側の負荷を考えての事だと思います。つまり、合計7つの評価がそれなりであれば、仕事で扱う分には差し支えないです。