こんなプログラムを見ました。
お世話になっております。
今日、社内の人間が書いたプログラムを読んでいたら、こんな部分がありました。(forの中は構造だけ読んでください。)
List<String> list = new List<String>(); String[] temp = new String[3]; String prefix = ""; String body = ""; String suffix = ""; for(int i = 0; i < 3; i++) { switch(i){ case 2: prefix = "に"; body = "二"; suffix = "nd"; break; case 1: prefix = "いち"; body = "一"; suffix = "st"; break; case 0: prefix = "0"; body = "零"; suffix = ""; break; } temp[i] = prefix + body + suffix; } list.add(temp[2]); list.add(temp[1]); list.add(temp[0]);
このプログラムで、私が気持ち悪いと感じるところが3つあります。
- forの終了条件をtemp.lengthを参照せずに、マジックナンバーを書いている。
- switchの分岐条件として、ループカウンタを使用している。
- caseがなぜか降順に書かれている。
最後の処理は気持ち悪いというか、完全にアウトです。多分、はじめはループの中で処理していたものの、0,1,2の順番でリストに追加されるのがまずかったので、ループの外に出してしまったのでしょう。私ならcaseの条件を変更して対応しますけど。
このことを先輩に「これを書いていたチームのリーダーに質問しましょうか」と相談したところ、「そこまで把握していないだろう」とおっしゃっていました。じゃあいったい誰がプログラムの品質を保証するというのでしょうか。品質が保証されたプログラムを書いてもらうために、依頼したはずなんですけど。これも気持ち悪いと思います。
以上