ハンガリアン記法で思い出したこと…

キーボード

ある人のツィートで、ハンガリアン記法なるものを久しぶりに思い出しました。今のようなプログラミング時のアシストが皆無だった時代に、少しでもプログラムの可読性を上げようとする試みだったと思います。なぜハンガリアンかというと、この記法を提唱した当時のMicrosoft社のプログラマがハンガリー人だったからです。そういったネーミングが多い時代でしたね。

ところでハンガリアン記法とは、変数名の頭に型を表す英字を小文字で付加する記法です。たとえば、int型の変数NumberならばiNumberという感じです(数値だったらnだったかな?)。当時はC言語が主流だったので、int, long, char, doubleなど型もシンプルだったと思います。ポインタならpを付けるとかだったように記憶しています。ゼロ終端文字列ならszとか。だんだん思い出してきました。

そのうち、配列だったらary、フォームだったらfrmを付けるというようになっていって、「えーい!こんなのやってられるか!」という感じで廃れていったように記憶しています(違ってたらゴメンナサイ)。

当時、プログラマだった私はけっこう真剣にハンガリアン記法を実践していたと思います。さらに言えば、C++をメインにしていたころ、クラスのメンバ変数の頭に”m_”を付けるなど、やっていました。どこかで見てこのようなことをしていたかと思いますが、どこの誰が言い出したことなのか、まったく記憶にありません。けっこういい加減なもんですね。

さて、けっこう真剣にやっていたと言いながら、昔のソースファイルなど引っ張り出して眺めていましたら、少し、いや、かなりいい加減だったことが発覚しました。なにしろ、同じクラス内でも、ルールが混在しているんですから(コメントがイミフなのは昔やったプロジェクトのせいだと思ってください)。

    BYTE m_bDrawHanduraOutline;    // 版面輪郭線描画
    BYTE m_bDrawOriginPoint;    // 基準位置描画
    BYTE m_bDrawCurrentTextFrame;    // カレント文字枠輪郭線描画
    BYTE m_bDrawTextFrameOutline;    // テキスト枠輪郭線描画
    WORD DisplayFrameNumber;    // 文字枠番号表示
    WORD DisplayFrameLink;    // 文字枠リンク表示
    BYTE m_bDrawControl;    // 編集記号描画
    WORD DisplayDummyLine;    // ダミー線表示
    WORD SimpleGraphic;    // 図形単純表示
    WORD MouseToolType;    // マウスツールのタイプ
    WORD AutoScroll;    // 自動スクロール

どうやら、最初のころはルールなど考えていなかったようですが、そのうちハンガリアン記法やその他のルールに則って書くようになり、結果的に混在、ということになったようです。一人ならいいですが、大規模プロジェクトで、しかも長期に渡ったりすると、こんなのはざらに起きそうです。

名前付けなどは生成されるコードに影響を与えないはず、なのですがメンタル的な影響が結局コードにも影響する、みたいなことはありそうですねぇ。

コメント