このプログラムを極度に難解にしている第2の原因は、フラグの多用です。とにかく、あちこち
にフラグが散りばめられてあり、何を意味するのかどこにも書かれていないので、理解するのにす
ごく苦労しました。いや、正直いって、これが原因で、プログラム全体を理解するのを放棄しまし
た。
まず、フラグがどのように使われているか見てみましょう。
- (1) FLG (27,33行)
-
各ファイルを調べ終ったかどうかのフラグで、' '(空白)に初期化しておき、調べ終ると'*'を書
き込んでいます。すごい使い方です!?
checkedのような名前にし、値は、TRUE, FALSE
をとるようにすべきでしょう。
- (2) DFLG (41行)
-
グローバルなフラグで、バックアップ元、バックアップ先がハードディスクかフロッピィーディ
スクか(HD/FD)の組み合わせを示します。それもなかなか器用な方法でです。
変更プログラムでは、
typedef enum {
floppy_disk, hard_disk
} dev_type;
として、新しい型dev_typeを定義しました。そして、バックアップ先、バックアップ元で一つの変
数DFLGを器用に使い分けるのを止め、
dev_type dev_type_from;
dev_type dev_type_to;
の2つの変数を確保しました。
- (3) flg (47行)
-
main中の局所変数で、関数disk_chkからドライブタイプ(HD/FD)を返してもらうために使用して
います。
drive_type のような名前にすべきですね。
- (4) tflg (218行)
-
関数disk_chkのパラメータで、指定ドライブのタイプ(HD/FD)を返します。
ここも、drive_type のような名前にすべきですね。
- (5) flg (224行)
-
MS-DOSのシステムコールをするために、ドライブ名から求めたドライブ番号のための変数のよう
です。
drive_number のような名前にすべきですね。どうしてフラグでもないのに、flg なんて名前に
したのでしょうか。
まだまだいっぱいフラグがあります。もっと後ろでは、flg, flg1, flg2とかいう名前で、本来
のフラグらしい使い方をするようになり、ファイル数のFCNTと絡みあって、どんどん複雑度を増し
ていきます。私の頭はもうついて行けなくなりました。本人は、よくこれで頭が混乱しなくて作れ
ますね。(実はいっぱい混乱しているのかな?それとも、記憶力抜群なのかな?)
まるで小学校の運動会みたいに、万国旗が翻っているようなプログラムです。これでは、a, b,
c とかいう名前をつけている方がまだましですね。「意味」のある名前をつけないと、暗号遊びで
すね。それとも神経衰弱かな。
|
O'Reilly Japan刊
3/14発売
増刷:第3刷決定♪
オープンソース
Scheme言語処理系
Gaucheの愛好者団体
詳細はブログで
|