- PR -

FuncとHashSetの命名

1
投稿者投稿内容
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2008-11-11 01:34
otfです。
お世話になっております。

.NET Framework 3.0で追加された、
Funcデリゲートと
HashSetクラス

これらの命名をなぜFunctionとSetにしなかったのかに疑問を持ちます。
FuncというのはFunctionの省略形ですが、MSDNの名前付けのガイドラインを見ると
引用:

http://msdn.microsoft.com/ja-jp/library/cc433227(VS.71).aspx より引用
識別子名の一部には省略形または短縮形を使用しないでください。たとえば、GetWin ではなく GetWindow を使用します。


とあります。
また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 ]
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-11-11 09:39
引用:

VB.NETでは、FuncとSetは予約語です。
http://msdn.microsoft.com/ja-jp/library/ksh7h19t(VS.80).aspx
もしかしてこの影響でしょうか?



Fucnについてはそのとおりでしょう。(FuncとSetではなく、FunctionとSetですね)
Setについてはそうかもしれませんし、そうでないかもしれません。

省略した命名を避けるべきという点を「MSDNの名前付けのガイドライン」
を根拠にご指摘になっていますが、同様にガイドラインに以下の文章があります。

単語の選択
http://msdn.microsoft.com/ja-jp/library/cc433410(VS.71).aspx

既存の.NET言語のキーワードを避けましょう、
ということが書かれています。わざわざ既存の言語のキーワードと
同じ命名にするのは、嫌がらせに近いものがあります。

引用:

ただVB.NETでは角かっこ ([ ]) で囲むことで回避できますし、



わざわざ[]で囲まないといけなくなるのはまっぴらごめんです。
ユーザに不便を強いてまで、省略系の命名を避けるという選択は
しなかったのだろうと思います。
(VBのユーザ数を考えれば妥当な選択だろうと思います。)

引用:

シンタックスシュガーとして新たな予約語を定義してもよいと思います。



どんな予約語を定義すれば回避できるとお考えなのかよくわかりません。
新たな予約語を導入しても、Functionという予約語はそのままですから、
Functionというクラス名を使うとやはり[]で囲む必要がありますよね。

引用:

(VB.NETは予約語を増やすことには意欲的に思う)



そんなことはありません。VB7.0、7.1、8.0、9.0の言語仕様書を見れば、
予約語の選定には非常に気を使っており、予約語を増やさないように苦心
しているのが読み取れます。むしろ言語仕様を整理することで、
予約語は減らした(予約語からキーワードに降格させた)ものもあるくらいです。

<修正>
新たなキーワードを導入しても、Functionという予約語はそのままですから、
    ↓
新たな予約語を導入しても、Functionという予約語はそのままですから、
</修正>

[ メッセージ編集済み 編集者: よねKEN 編集日時 2008-11-11 10:15 ]
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2008-11-12 00:05
よねKENさん

ご回答ありがとうございます。
引用:

省略した命名を避けるべきという点を「MSDNの名前付けのガイドライン」
を根拠にご指摘になっていますが、同様にガイドラインに以下の文章があります。

単語の選択
http://msdn.microsoft.com/ja-jp/library/cc433410(VS.71).aspx

既存の.NET言語のキーワードを避けましょう、
ということが書かれています。わざわざ既存の言語のキーワードと
同じ命名にするのは、嫌がらせに近いものがあります。


そちらのガイドラインも読んでみました。
ほとんどVB.NETのキーワードですね。
これだけ多いと逆にVB.NETが嫌がらせに思えます!

引用:

どんな予約語を定義すれば回避できるとお考えなのかよくわかりません。
新たな予約語を導入しても、Functionという予約語はそのままですから、
Functionというクラス名を使うとやはり[]で囲む必要がありますよね。


VB.NETだけはしょうがないのでFuncという略語を予約語にしたら
ほかの言語まで犠牲にすることはなかったと思います。
それか
Integer -> Integer
など記号を使ってもいいですが、これはVBっぽくないですね。

引用:

そんなことはありません。VB7.0、7.1、8.0、9.0の言語仕様書を見れば、
予約語の選定には非常に気を使っており、予約語を増やさないように苦心
しているのが読み取れます。むしろ言語仕様を整理することで、
予約語は減らした(予約語からキーワードに降格させた)ものもあるくらいです。


それは知りませんでした。
AddHandlerやRaiseEventなどは予約語を定義しなくても済むように思えたので
予約語の導入に意欲的だと思いました。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-11-12 11:57
引用:

otfさんの書き込み (2008-11-12 00:05) より:
そちらのガイドラインも読んでみました。
ほとんどVB.NETのキーワードですね。
これだけ多いと逆にVB.NETが嫌がらせに思えます!



.NET Frameworkの立ち上げ時のMicrosoftのサポート言語が、
C#、VB、JScript、J#なので、その論理和になっているのだと思います。
C++のキーワードは入っていないように見えますね。
ちなみにFunctionはJScriptのfunctionのキーワードともかぶっているので、
どっちみちNGな命名ですね。

.NETはマルチランゲージをうたっているので、
その点をクラスライブラリは配慮しなければならないので、
極力避けましょうということで、ここに挙がっていなくても、
他の.NET言語のキーワードも避けた方がよりよいでしょうね。
(これからだとIronPythonやIronRubyのキーワードとか)

引用:

VB.NETだけはしょうがないのでFuncという略語を予約語にしたら



それでは回避になっていませんよ。予約語のFunctionは残しつつ
Funcを予約語に追加したのでは、[Function]としなければならないこと
には変わりありませんし、そうではなくFunctionをやめてFuncにしろって話なら、
Microsoftは既存のVB.NETアプリをそのように移行する方法を提供する必要があります。

#Funcデリゲートが追加されたのはごく最近ですが、
#VB.NETは.NET Frameworkの最初からあります。
#(.NET以前のVBは1991年からあります)
#これらの移行のコストを考えると・・・

引用:

AddHandlerやRaiseEventなどは予約語を定義しなくても済むように思えたので
予約語の導入に意欲的だと思いました。



どんな言語のどんな予約語も必須というわけではありませんから、
その予約語を定義するのかは、文法のわかりやすさをはじめとして
様々な要素について言語設計者が検討した結果でしかないと思います。
1

スキルアップ/キャリアアップ(JOB@IT)