はれ 風が冷たい

 今日のネタは2つ。

メンバーが仕事をしなかったので注意した

 作業に必要なファイルが添付されているメールを転送したら、わざわざ昨日の話題をほじくり返してグチグチ言い始めた。こいつは調子に乗ると平気で人の批判をしつづける。これまでにも何回かあった。
 前の会社では上司から理不尽ないじめをうけていたらしいが、あながち理不尽でもないような気もする。僕はまだ我慢しているが、ろくに仕事もできないくせにそれを認めようとせず、人の批判ばかり楽しそう。そんな人間はひどい目にあっても仕方ないよね。
 で、2回ほど「その話はこれからの作業に関係あるんですか」「ないですよ」というやりとりをした後、さすがに頭に来てしまいました。「そのメールは作業をすすめるために送ったのであって、CSVの改行についてグダグダ言うために送ったんじゃない。わかりました?」と注意しました。そうするとさすがにおとなしくなり、作業を進めてくれました。僕より2つ3つ年上なんですがね。

リファクタリング

 上のメンバーが書いたプログラムをリファクタリングした。
 帳票を出力するプログラムで、簡単に言うとリストを一定のサイズでちょんぎってヘッダとフッタをつけて出力するだけ。なんだけど、ソースを見ると生々しいbyte[]の配列だらけ。重複もあちこちにあるし、頻繁にStringBuilderをnewしている。構造化すらできていない。
 これはいかんということで、まずはコードの重複を取り除くところから開始。上に書いたように、大きく分けるとヘッダ、フッタ、本体に分かれるため、そのバイト配列を組み立てるメソッドを切り出した。次に、各メソッド固有のパラメータとメソッドを固めてクラスを作った。
 重複を取り除くことで、処理の流れが見えてきた。ここで気づいたのは、一行づつ整形してbyte配列にして出力しているが、全体を整形してから一気に出力した方が読み易くないか?ということ。というわけで、既存のプログラムは動作する状態のまま一旦保留にしておいて、新たなクラスを作成した。

 元のリストをChohyoオブジェクトへ放り込むと、PageオブジェクトへLineオブジェクトを追加し、PageあたりのLineがいっぱいになったら新しいPageオブジェクトを作成する。このときにHeaderオブジェクトをコピーすることで、共通のヘッダを実現する。全体のページ番号と現在のページ番号はPageオブジェクトのリストから簡単に求めることができる。リファクタリング前はループの中でカウントしていたため、だいぶシンプルになった。このクラス構成は他のプロジェクトでも流用できそう。パフォーマンスも改善した気がするので、リファクタリング前のリビジョンを取り出して計測してみたい。
 明日は保留にしたソースに対応する。