『Cプログラミング診断室』目次次(第3章 上司が問題 同じことを書くな)

第3章 上司が問題

フラグ


このプログラムを極度に難解にしている第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の愛好者団体

詳細はブログで



Copyright1996 Hirofumi Fujiwara. No reproduction or republication without written permission
『Cプログラミング診断室』目次次(第3章 上司が問題 同じことを書くな)