【第6回】
第2章:超簡単テキストエディター
プログラムの最適化
(00/06/09)
こんにちは、nakkaです。今回でいよいよテキストエディターの回も最後となりま
す。前回までで付けたい機能がある程度そろったので、ソースコードの共通部分を関
数化してまとめることによって、ソースコードの無駄を省き、シンプルで読みやすい
ものにする“プログラムの最適化”を進めていきます。
共通部分をまとめよう
プログラムの作成からしばらく時間をおいて再度プログラムを見てみると、プログ
ラムの大まかな流れがつかみにくくなるということがたまにあります。プログラミン
グのときは見やすいプログラムを心がけるものですが、それでも時間が経つと忘れて
しまうものです。ソースコードの共通部分をまとめたり、しっかりとコメントを入れ
ておけば、忘れた頃に見てもすぐに把握できます。
たとえば、ウィンドウを閉じるときにファイルに変更がないか確認する処理ですが、
ファイルの変更をCheckEditという関数にまとめたおかげで、下記のようにウィンド
ウを閉じる際のソースコードの行数を短くまとめられ、大まかな流れがつかみやすく
なりました。
case WM_CLOSE:
/* 変更時保存確認 */
if(CheckEdit(hWnd) == FALSE){
break;
}
EndWindow(hWnd);
DestroyWindow(hWnd);
break;
|
いいプログラムというのはどんなものかと定義するのは難しいですが、作りやすさ
を中心に考えれば、まず制作者自身にとって見やすいことが大切でしょう。コメント
の入れ方とか、カッコの位置など自分なりのルールを決めてしまえば、コーディング
のときも、後でソースコードを読み直すときも、何も悩まずに済むというものです。
あとは、何度も繰り返す処理を関数にすれば見やすくなるし、プログラムのファイル
サイズも小さくなります。さらに、何度も同じ関数を呼ぶ場合は一度だけ呼ぶように
すれば処理が速くなります。メモリは使うときに使う分だけ確保すれば、実行時のメ
モリの節約になります。
しかし、たった数回しか使わない数行のプログラムまですべて関数化してしまうと、
ぱっと見でわかりくいソースコードになってしまいますから、やりすぎに注意しましょ
う。見やすさを保ちながら処理の効率化を図るというように、バランスも重要になっ
てきます。前回までのテキストエディターのプログラムを私なりに最適化してみまし
た。前回のプログラムをコンパイルした結果は30,720バイでしたが、今回のプログラ
ムをコンパイルした結果は29,696バイトになっています。処理や機能は全く変化して
いませんので、じっくりとソースコードを見比べてください。
確保と解放
プログラムに限ったことではありませんが、なにかを使ったあとは必ず片づける必
要があります。たとえばファイルを開いた場合は、そのファイルを閉じないとファイ
ルをロックしたままになってしまいます。次回そのファイルを使うときに開けなかっ
たり、エクスプローラから削除できなくなってしまいます。また、メモリを確保した
場合は使い終わったら解放しないと、どんどんメモリを消費していって、最終的にメ
モリ不足でWindowsが不安定になることも考えられます。
上記のような問題を回避するには、ファイルを使い終わったらすぐ閉じる、メモリ
を使い終わったら常に解放するようにクセを付けておくことが大切です。テキストエ
ディターの場合も、人によっては全く終了しないでしょうし、新しいファイルをどん
どん開いていくでしょうから、必要がなくなればファイルを閉じたり、メモリを解放
するようにしましょう。
いよいよ完成
いよいよ完成ですが、コンパイルできたからといってすぐ公開や配布を行うのでな
く、十分にテストを行いましょう。プログラミングはほしい機能を追加していくこと
が中心なので、なかなか不具合はなくなりません。しかし、テストを重ねれば不具合
を減らすことは可能です。テストは正常なケースを試すだけでは不十分です。ユーザー
は制作者が想定しない使い方をするものと考えて、いろいろな異常ケースを十分に試
すことが大事だと思います。たとえば、開くはずのない音声ファイルを開いてみると
か、想定している以上の巨大なファイルを開いてみるとか、思いつくことはどんどん
試してみましょう。
テストを行って問題がないことが確認できたら公開です。ここでは、最適化後のプ
ログラムに、折り返しや表示フォント設定、簡単な検索機能、タブ設定、ツールバー
など追加しました。これだけあれば、初心者が使うテキストエディターとしては十分
な機能をもっていると思います。みなさんもソースを見ながら、各機能をもっと使い
やすくしたり、新しい機能を考えてみてください。
テキストエディターはひんぱんに使うソフトなので、使いながら機能を追加してい
くと、どんどんプログラミングの技術も向上していくと思います。そして、ある程度
の機能を盛り込むことができたら、ぜひ公開しましょう。自分では気づかなかった要
望やアイデアがユーザーから寄せられ、ユーザーとキャッチボールを繰り返しながら、
さらに高機能で便利なものに育っていくはずです。
(nakka)