この連載では,Javaを使って普段の仕事をラクにするツールを作ってきました。最終回である今回は,前回説明したオブジェクト指向を利用して,連載で作成してきたツールの集大成を作り上げましょう。

こちらからサンプルプログラムをダウンロードできます。

 前回は,リスト1のようなコードを作成しました。覚えていますでしょうか。正直,きれいとは言えないプログラムでしたね。今回は,このコードに改良を加えていきます。

リスト1●前回のプログラム
リスト1●前回のプログラム
[画像のクリックで拡大表示]

 前回までに実装した機能は以下の通りです。

  • 全体の合計を表示する
  • 月ごとの合計を表示する

 今回は,新たに次のような機能を追加していきます。

図2●実行結果の画面
図2●実行結果の画面
  • 項目ごとの合計を表示する
  • PDFファイルに出力する

 機能追加に入る前に,前回のコードを整理しながら復習してみましょう。このコードは,テキスト・ファイルから家計簿を読み込み,項目(食費や光熱費など)ごとに集計して,月ごとの集計結果を表示します(図1)。リスト1の(1)のブロックで入力するファイルを読み込み,変数を用意します。そして,(2)のブロックで「=(イコール)」で分割して合計を計算し,(3)のブロックで出力します。一応ですが,目的の結果は得られています(図2)。

図1●作成する家計簿ツールのイメージ
図1●作成する家計簿ツールのイメージ

コードを整理してきれいにしよう

 リスト1の実装は,あまりにも入力するファイルの内容に依存しすぎています。「2008/2」という文字列があったり,「janSum」のように合計値を計算するための変数を用意していますが,1月と2月の変数しかありません。これでは入力ファイルに3月以降の項目があった場合は,動作しません。

 そこで,まずはコードを整理して汎用性を高めてみましょう。コードを整理する際に重要なことは,「機能を何も変更しない」ということです。

 リスト1であれば,実行結果の出力を一切変更することなく,コードを変更します。これは,「コードを整理してきれいにする」という作業と「機能を追加する」という作業を明確に区別するということです。

 コードをきれいにするのは意外に難しいものです。下手するとバグを埋め込んでしまいます。きれいにすると同時に新規機能を追加しようとすると,さらに作業が難しくなります。バグを生みやすくなるうえ,生じたバグの原因も非常にわかりにくくなってしまいます。