こんなコードを見た。
public static void main(String[] args) { StringBuffer sb = new StringBuffer(); String[] result = new String[100]; int fizz = 3; for (int i = 1; i < 100; i++) { result[i] = String.valueOf(i); if (i == fizz) { fizz+=3; result[i] = "fizz"; } } int buzz = 5; for (int i = 1; i < 100; i++) { String s = result[i]; if (i == buzz) { buzz+=5; if (s.equals("fizz")) { s = "fizzbuzz"; } else { s = "buzz"; } } sb.append(s); sb.append("\n"); } System.out.println(sb.toString()); }
言語もJavaではないし、中身もFizzBuzzではなく実際にサービスの提供で使う業務ロジックでしたが、こんなことをやっているコードを見たことがあります。というか、見つけて直しました。先日上げた評価する視点でいう「無駄なことをしていない」という点でNGが出てしまうコードです。
多分、「とりあえず作った」→「とりあえず動いた」→「OK!」という経緯があるんでしょう。ぱっと見動いた(ように見えた)からOKとしてしまう、という心理は分からないでも無いです。でも、そういう行為って基本的に自分自身に対しての場合以外、なかなか寛容になれないもんですよね(・∀・)
ほんのちょっと冷静に、「無駄なことしてないかな?」とか「これが実行された場合、余計なリソース(例えばメモリ、例えば時間)を消費したりしないかな?」とか考えると、同じ条件評価を2度している、同じ条件で同じ回数ループを回しているって所に疑問を持つ筈なんですが。。。
こういったコードを何故書いてしまうのか、という事に真剣に取り組んだら世界中のソフトウェアの品質が上がるかも知れませんね。