メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.387) XP10 リファクタリング  2003/09/14


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第387回 XP10 リファクタリング
 発行    2003年9月14日(日曜日)
 発行数   約3200

{magclick}
{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンはまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・このメールマガジンは、横60文字で作成しています。
 また、インデントはすべて半角スペース4つで構成しています。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、まぐまぐさんのホームページでお願いします。
・まぐまぐさんのバックナンバー(下欄参照)を活用して下さい。
・ここは私の復習の場です。内容は約1ヶ月内外に私が勉強した
 内容になっています。最新の技術があれば、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは。あゆしゃです。

 先日、めがねを買いました。

 私は近視で、視力は0.05ぐらいです。

 よって、めがねをかけないとパソコンに表示される文字すら
読めないので、常にめがねをかけています。

 めがねをかけて、視力は0.5ぐらいです。

 でもこれぐらいだと、車を運転するのに危ない。

 ひっじょ〜に、危ない!

 よって、少し度の強いめがねを買いました。これで、視力は
1.0になります。

 前のめがねでは、道路標識もろくに見えなかったのですが、
新しいめがねでは、ばっちり見えます。

 しかし、1.0というのは少々きつすぎるので、運転するとき
だけにしています。

 車に乗ったら強いめがねをかけて運転し、降りるときに普通の
めがねに替えています。

 しかしこれが、よく忘れるのです。

 ・・・家の中に入ってから、強いめがねをかけたままだという
ことに気がつくのです。

 私は不精なのでコンタクトはやめなさいといわれているのですが
本当にそうですね。

{magclick}
/*========================================================*/
 今回のお題  << XP10 リファクタリング >>
/*========================================================*/

 12回分の連載の内容です。

 1 XPって何?
 2 ペアプログラミング
 3 テスト駆動開発
 4 短期リリース
 5 ユーザテスト
 6 全員同席
 7 最適ペース
 8 コード共同所有
 9 常時結合
10 リファクタリング
11 シンプル設計
12 計画ゲーム

 さて、今回は10番ですね。

/*========================================================*/
 10 リファクタリング
/*========================================================*/

 聴きなれない言葉です。

 リファクタリングは、ソースコードをきれいにする作業のこと
です。

 日本語では設計改善、といいます。

 ある程度プログラムに慣れた人ならば、日常的にやっている
作業なので、言葉だけ覚えれば大丈夫です。

 たとえば、

// short文字列をchar文字列に変換する
memset( buff, 0, sizeof( buff ) );
for( i = 0; i < sizeof( buff ) - 1 && strBuffer[ i ]; i++ )
    buff[ i ] = ( char )strBuffer[ i ]; // 全角文字は無視
// 'R'を検索する
pch = strchr( buff, 'R' );

 という感じのソースコードがあったとします。

 文字列をショートで扱っているのは、きっとユニコードなので
しょう。

 半角文字も全角文字も1データで扱えるので、便利なことは
便利なのかもしれませんが、strchrなどの使い慣れた関数を
使いたいときは、不便です。

 ユニコードのためのライブラリがあるかどうかは、処理系に
依存しますが、探すのも面倒です。

 それに、マイクロソフト以外の、ASCII規格以外のライブラリ
は信用なりません。

 使ったとしても、バージョンアップなどの移植のときに問題に
なるので、あまりよい習慣ではありません。

 ボー○ンドとか、平気で裏切りますから。

 そこでcharの文字列に変換してからstrchrを使っています。

 しかし、こういう事情がある場合、この手の変換処理はいくらで
も出てくるでしょう。

 汎用性もありそうですし、文字列を変換する処理を関数にして
しまってもいいかもしれません。

/*========================================================*/

 駄目です。

 「汎用性がありそうだから」という理由で共通関数を作っては
いけないのです。

 なぜならば、ひょっとしたら、ここでしかその変換処理を使わな
いかもしれません。

 それなのに、「ありそうだから」というあいまいな理由で関数を
作っては、ちまちまとした関数の嵐が吹き荒れることになります。

 関数を増やすと関数に関係する書類をつくらなければならな
かったり、書類が自動生成されるにしても、自動生成のための
コメントをちまちまと入れなければならなくなったります。

 面倒です。
 しかもそれで「予想が外れた」では、あきれてしまいます。

 それに、コメントを入力するのは、ソースを入力するよりも
時間がかかります。

 ソースコードは日本語変換する必要がありませんからね。

/*========================================================*/

 たった2,3行の関数でも、その関数が非常にたくさん使われて
いるのであれば、関数としても立派なものです。

 しかし、たった2,3行の関数である上に、数箇所でしか使われ
ていないということであれば、ちょっともったいない。

 でも、まったく同じソースコードが延年続いているのも、
よくありません。

/*========================================================*/

 XPは、失敗したプロジェクトを反省して作られたルールブック
です。

 リファクタリングされていないような、汚いソースは、バグを
生み出す温床であると考え、そこでソースをきれいにすることを
XPは推奨しているのです。

 ソースコードのサイズに(ある程度)比例してバグは発生する
ものですし、ソースが短くても複雑怪奇であれば、それ自体がバグ
であると言われかねません。

 それをリファクタリングで解消しようということです。

 しかし、冒頭でも書いたように、ある程度経験がないと、なか
なか実践はできません。

 そこでリファクタリングは、こういうときにこーしなさいよ、
というルールをまとめています。

 手順を覚えるのはなんですが、リファクタリングの目的を
抑えておけば、簡単です。

 リファクタリングの目的は、次の3点です。

・プログラムを見やすくする

・バグを予防する

・メンテナンスを容易にする

 プログラムを見やすくするために、簡潔にまとめよう、

 バグを出にくくするために、同じソースは関数にしよう、

 メンテナンスを容易にするために、もっと機能を簡潔にしよう、

 といった感じのことです。

 しかしやりすぎると、かえってごちゃごちゃになりますので、
ほどほどにしましょうね。

/*========================================================*/

 ソースコードは絵や作文と同じで、心を映し出す鏡です。

 常にきれいな心でいることを心がけましょう。

 私には無理ですが。

 ヴィオやりたいなぁ。。。

/*========================================================*/
 さいごに
/*========================================================*/

参考文献
 よくわかる最新XPの基本と仕組み
 長瀬嘉秀 監修
 畑田成広 樋口博昭 著
 秀和システム
 ISBN4-7980-9374-3
 1900円(税別)(ただし支給品)

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は9月15日(月曜日)に、第388回を送ります。
 お題は「XP11 シンプル設計」

 お楽しみに!

/*========================================================*/
 最後の決り文句
/*========================================================*/
 このメールマガジンは、まぐまぐさんから発行しています。
 このメールマガジンを解除したい場合は、まぐまぐさんをご利用
ください。このメルマガのまぐまぐアイディーは最後にあります。
 このメールマガジンには広告が挿入されます。
 このメールマガジンの内容に文面の引用はありません。
 めーらっくすの場合はめーらっくすの利用方に従ってください。
 このメールマガジンの内容は、転用、流用、宣伝、リンク、
ヤモメ団のようなソースコード・・・ぶっ なんて大歓迎です。

{magclick}
/*========================================================*/
 
/*========================================================*/

発行者 あゆしゃ

まぐまぐアイディー
0000020674

まぐまぐバックナンバー
http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674

あゆしゃの世界
http://ayusya.hp.infoseek.co.jp/

登録と解除
http://www.mag2.com/m/0000020674.htm

ご意見・ご感想・ご質問メール
mailto:ayusya@flamenco.plala.or.jp

めーらっくす
http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F

ブラウザの閉じるボタンで閉じてください。