著作一覧 |
なんか良くわからんけど、おそらくJDBCのResultSetあたりから自動的にHashMapを作るものらしきユーティリティークラスがあって、そいつのコンストラクタを呼ぶ場所がこんな感じになっている。
String[] props = new String[] { "a", "b", "c", ..... }; // カラム名らしい。 RSUtil rsu = new RSUtil(props);
とりあえず、これについてはまあ良いとして、そしてpropsが50要素くらいあるのもまあ承知しているし、かつそこに追加で20要素くらいおれが付け加えるというのも良いだろう。
が、一体どこで詰め込みしているんだ? と追っかけると、とんでもないものに出会った。
(ちょっと大げさに表現すると)
String sql = "select ";
ああ、と、ここまで読んで、これからえんえんとpropsの50要素をループで詰めるんだなと想像して、StringBufferとかにしようか、いや、固定数だからそのままにしておこうか、とか思いながら下を読む。
sql += " nvl(a, ' '), "; sql += " nvl(b, 0), "; ... (スクロール2回分) sql += " from "; sql += TABLE_NAME; sql += " where "; ...
わが目を疑うこの惨事。(スクロール2回分のところには「ほぼ同上」な行が)50行続くのだな、これが。
えーと、さっきあったpropsっていうのは一体なんなんだ?
いや、答はわかっている。nvlをぐにゅぐにゅとかもごるんだろう。
ならば、こうすりゃいいじゃん。
String[] options = new String[] { "' '", "0", .... }; ... assert props.length == options.length; for (int i = 0; i < props.length; i++) { sql += " nvl(" + props[i] + ", " + options[i] + "), "; } // バグがあるから、続く
いや、本当はこれでも不快なのだが、それでも50行えんえんと(しかも、おれはそこにさらに20行も追加するのか?)並べるより200光年くらいましだ。
というよりも、おれが真にぞっとするのは、不快感と恐怖に襲われてめまいがしてくるのは、このコードを打ち込んだやつは、ひたすら、最初のsql += " nvl(a, ' '), ";
をコピーして50回ペーストして、ひたすら、a
と' '
を黙々と変更していたのだろうという、その底冷えのする仕事風景なのだ。(自動生成ですらないのは、それっぽい元ネタやスクリプトが残っていないから間違いなかろう。おそらくpropsの配列の中身も何かをひたすら写経したのであって、Metadataから生成したとかではあるまい。というか、Oracleなのに全部大文字ではないから、写経以外とは思えない)
その作業風景は、まさにコーダーという言葉から想像される職業の人そのものだ。どこにも意思決定のかけらもない、機械的な繰り返し作業だ。吐き気がする。
ジェズイットを見習え |