|
/*========================================================*/ <<<あゆしゃの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 |