« いつまでも、新品同様? | トップページ | それはないよRedHat »

2006/12/29

ハンガリアン記法ふたたび

随分とご無沙汰してしまいましたが、前回のハンガリアン記法の記事にコメントがありましたので、また、書いてみようかと思いキーボードをとる事にしました(うーん、筆を「とる」というのがあるが、キーボードの場合は、「打つ」だろうか?)

最近は、.NET関連の仕事が増え、JavaだのC#だのを使うことも多いので、非ハンガリアン(通りすがりさん紹介によると「システム・ハンガリアン」ですが)でコードを書く事が多い今日この頃です。

前回の記事で、通りすがりさんよりご紹介のあった記事にあるように、私が「悪なのか?」と考えたのは、「システム・ハンガリアン」の方です。

とりあえず、一読した限りの私の理解で、「アプリケーション・ハンガリアン」と「システム・ハンガリアン」の違いを説明すると(間違っていたらスイマセン)

プレフィクスが変数の意味を表すのが「アプリケーション・ハンガリアン」
プレフィクスが変数の型を表すのが「システム・ハンガリアン」

Charles Simonyi氏は「アプリケーション・ハンガリアン」を考えたが、他のMicrosoftのエンジニアが誤解、「システム・ハンガリアン」として使ったのが広まったというのが真相で、Simonyi氏の意図は、決して型をプレフィクスに書くものではなかったとの事です。

つまり、型は同じであっても、使途が違っていればプレフィクスを使って区別するというのが「アプリケーション・ハンガリアン」の意図だったという事です。この考え方は、理にかなっていると思います。「システム・ハンガリアン」の場合でも、

char * pcBuffer ;
char * pszString ;

のような使い方は、同じ型であっても格納しているデータが違っていることを表しているという点では、「アプリケーション・ハンガリアン」に近い使い方と言えるかもしれません。もちろん、「アプリケーション・ハンガリアン」であれば、格納しているデータについて、もっと詳細な分け方をするだろう(格納する文字列がパスワードを示すなら"passwd"だとかという具合)事は用意に想像できます。

さて、紹介された記事では、変数を見た時点で型が解かっても、「有用なことをほとんど何も教えてくれない」ので、「はなはだ煩わしくほとんど役立たず」であるとしています。

「システムハンガリアンにも、バグを見つけやすくする特質がなくはない。少なくとも、システムハンガリアンを使うなら、変数の型がその使われているその場でわかる。しかしそれはアプリケーションハンガリアンの有用性には遠く及ばない。」

とも記されています。

私個人としては、「変数の型がその使われているその場でわかる」事が、「システム・ハンガリアン」の有用性だと思っています。たとえそれが、「アプリケーション・ハンガリアン」の有用性には遠く及ばなくても、否定する事にはなりません。

例えば、ポインタであるか否かを一見で区別出来るは便利だと思うのですが、どうでしょうか?

決して「アプリケーション・ハンガリアン」を否定しているのではありません。そもそも、変数名には無意識に、意味を付け加えている。紹介された記事では、

「アプリケーションハンガリアンは有用で意味のあるプレフィックスを使う。配列インデックスを表す"ix"や、個数(count)を意味する"c"、2つの数の差(difference)を意味する"d"などだ(たとえば"dx"は幅を表す)。」

と記されているが、おそらく、殆どのプログラマは無意識に、

int nHogeIndex ;
int nHogeCount ;
int nHogeDiff ;

といった書き方をしているのではないでしょうか?

「変数の型がその使われているその場でわかる」という事だけの為に、わざわざプレフィクスを使うのは、「繁雑」で「馬鹿らしい」というのも理解できます。もちろん、そう考える人は「システム・ハンガリアン」を使う必要はありません。前回書いたように、「デメリット」が「メリット」を超えているからです。

だからと言って「システム・ハンガリアン」は「悪」とは言えません。(もちろん、紹介の記事も、そんな事は言っていないと思います)実際、私も、JavaやC#を使う場合は、流儀に従ってCamel記法やPascal記法を使います。その場に合わせて最適なものを選べば良いのだと思いますが、如何でしょうか。

|

« いつまでも、新品同様? | トップページ | それはないよRedHat »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/62500/13245949

この記事へのトラックバック一覧です: ハンガリアン記法ふたたび:

« いつまでも、新品同様? | トップページ | それはないよRedHat »