- - PR -
FuncとHashSetの命名
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-11-11 01:34
otfです。
お世話になっております。 .NET Framework 3.0で追加された、 Funcデリゲートと HashSetクラス これらの命名をなぜFunctionとSetにしなかったのかに疑問を持ちます。 FuncというのはFunctionの省略形ですが、MSDNの名前付けのガイドラインを見ると
とあります。 またHashSetのHashはSetの実装を表しているのでSetだけのほうがいいと思いました。 VB.NETでは、FuncとSetは予約語です。 http://msdn.microsoft.com/ja-jp/library/ksh7h19t(VS.80).aspx もしかしてこの影響でしょうか? ただVB.NETでは角かっこ ([ ]) で囲むことで回避できますし、 シンタックスシュガーとして新たな予約語を定義してもよいと思います。(VB.NETは予約語を増やすことには意欲的に思う) なぜこのような命名になったのか知っている方、意見のある方がいらっしゃいましたら教えてください。 よろしくお願いします。 [ メッセージ編集済み 編集者: otf 編集日時 2008-11-11 01:36 ] [ メッセージ編集済み 編集者: otf 編集日時 2008-11-11 01:36 ] | ||||||||||||||||
|
投稿日時: 2008-11-11 09:39
Fucnについてはそのとおりでしょう。(FuncとSetではなく、FunctionとSetですね) Setについてはそうかもしれませんし、そうでないかもしれません。 省略した命名を避けるべきという点を「MSDNの名前付けのガイドライン」 を根拠にご指摘になっていますが、同様にガイドラインに以下の文章があります。 単語の選択 http://msdn.microsoft.com/ja-jp/library/cc433410(VS.71).aspx 既存の.NET言語のキーワードを避けましょう、 ということが書かれています。わざわざ既存の言語のキーワードと 同じ命名にするのは、嫌がらせに近いものがあります。
わざわざ[]で囲まないといけなくなるのはまっぴらごめんです。 ユーザに不便を強いてまで、省略系の命名を避けるという選択は しなかったのだろうと思います。 (VBのユーザ数を考えれば妥当な選択だろうと思います。)
どんな予約語を定義すれば回避できるとお考えなのかよくわかりません。 新たな予約語を導入しても、Functionという予約語はそのままですから、 Functionというクラス名を使うとやはり[]で囲む必要がありますよね。
そんなことはありません。VB7.0、7.1、8.0、9.0の言語仕様書を見れば、 予約語の選定には非常に気を使っており、予約語を増やさないように苦心 しているのが読み取れます。むしろ言語仕様を整理することで、 予約語は減らした(予約語からキーワードに降格させた)ものもあるくらいです。 <修正> 新たなキーワードを導入しても、Functionという予約語はそのままですから、 ↓ 新たな予約語を導入しても、Functionという予約語はそのままですから、 </修正> [ メッセージ編集済み 編集者: よねKEN 編集日時 2008-11-11 10:15 ] | ||||||||||||||||
|
投稿日時: 2008-11-12 00:05
よねKENさん
ご回答ありがとうございます。
そちらのガイドラインも読んでみました。 ほとんどVB.NETのキーワードですね。 これだけ多いと逆にVB.NETが嫌がらせに思えます!
VB.NETだけはしょうがないのでFuncという略語を予約語にしたら ほかの言語まで犠牲にすることはなかったと思います。 それか Integer -> Integer など記号を使ってもいいですが、これはVBっぽくないですね。
それは知りませんでした。 AddHandlerやRaiseEventなどは予約語を定義しなくても済むように思えたので 予約語の導入に意欲的だと思いました。 | ||||||||||||||||
|
投稿日時: 2008-11-12 11:57
.NET Frameworkの立ち上げ時のMicrosoftのサポート言語が、 C#、VB、JScript、J#なので、その論理和になっているのだと思います。 C++のキーワードは入っていないように見えますね。 ちなみにFunctionはJScriptのfunctionのキーワードともかぶっているので、 どっちみちNGな命名ですね。 .NETはマルチランゲージをうたっているので、 その点をクラスライブラリは配慮しなければならないので、 極力避けましょうということで、ここに挙がっていなくても、 他の.NET言語のキーワードも避けた方がよりよいでしょうね。 (これからだとIronPythonやIronRubyのキーワードとか)
それでは回避になっていませんよ。予約語のFunctionは残しつつ Funcを予約語に追加したのでは、[Function]としなければならないこと には変わりありませんし、そうではなくFunctionをやめてFuncにしろって話なら、 Microsoftは既存のVB.NETアプリをそのように移行する方法を提供する必要があります。 #Funcデリゲートが追加されたのはごく最近ですが、 #VB.NETは.NET Frameworkの最初からあります。 #(.NET以前のVBは1991年からあります) #これらの移行のコストを考えると・・・
どんな言語のどんな予約語も必須というわけではありませんから、 その予約語を定義するのかは、文法のわかりやすさをはじめとして 様々な要素について言語設計者が検討した結果でしかないと思います。 |
1