- PR -

shared な変数の参照

投稿者投稿内容
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2009-01-06 11:37
セラフ殿

ありがとうございます。

私も、そのサイトは拝見させていただいております。

そのサイトの中でのアプリケーションハンガリアンとは、
「その変数の kind を変数名の頭につけるもの」
というように読み取っています。

私は、アプリケーションハンガリアンの定義としては、
簡単ではありますが、この言葉が気に入っています。
逆に言うと、この言葉に表れない部分については、
かなり誤解しているかもしれません。


静的である事を表す接頭辞は、「s_」ぐらいしか知らず、
そのために、
引用:

武史さんの書き込み (2008-12-26 21:19) より:
s_ とかをつけるんだとしたら、典型的なシステムハンガリアンの一つですよね。


という、質問をさせていただきました。

なんか、誤解してそうだったら、ご指摘いただけるとありがたいです。
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-01-06 12:51
引用:


静的である事を表す接頭辞は、「s_」ぐらいしか知らず、
そのために、
引用:

武史さんの書き込み (2008-12-26 21:19) より:
s_ とかをつけるんだとしたら、典型的なシステムハンガリアンの一つですよね。


という、質問をさせていただきました。




ここで問題なのは「_s」という接頭辞がシステムハンガリアンか?アプリケーションハンガリアンか?ではなく、静的な変数を区別することがシステムハンガリアンか?アプリケーションハンガリアンか?が重要なので、接頭辞はなんでもいいと思います。

「s_」をつけること = システムハンガリアン ではないと思います。

私が貼り付けたURLを見ていただいて、誤解を恐れず発言すれば、

「その変数の kind を変数名の頭につけるもの」がアプリケーションハンガリアンであり、
「その変数の type(型) を変数名の頭につけるもの」がシステムハンガリアンである
と取れます。

なので、型名で無く、コードの誤りをわかりやすくするためのプレフィックスなら「s_」もありかな?っとも思います。

ただし、言語上の制約(システム)に縛られたハンガリアンをシステムハンガリアンと捕らえてしまうと、静的な変数を区別することそのものがシステムハンガリアンに見えてきてしまいます。

なので、以前の発言どおりとってもグレーな問題だと私自身は考えています。
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2009-01-06 14:51
うーむ。読解能力の低いセラフさんが出てくると、話がややっこしくなるので、できれば出てきて欲しくないなあ。さっさと退場して欲しいです。。

引用:

「その変数の kind を変数名の頭につけるもの」がアプリケーションハンガリアンであり、「その変数の type(型) を変数名の頭につけるもの」がシステムハンガリアンである と取れます。


それは type を極端に狭く解釈しすぎていますね。普通は、型だけでなくスコープやアクセス修飾子など言語仕様で規定されるシステマチックな要素を接頭辞にすることはシステムハンガリアンだとされています。(べるさんが提示したリンク先でも m_ を付けてインスタンス変数であることをあらわす例は、アプリケーションハンガリアンではなくシステムハンガリアンに分類されていることに注目してください。)

アプリケーションハンガリアンとは、言語仕様などに基づいておのずと決まるものではなく、システム設計ドメインで定義しないといけない接頭辞のことを言います。

引用:

ただし、言語上の制約(システム)に縛られたハンガリアンをシステムハンガリアンと捕らえてしまうと、静的な変数を区別することそのものがシステムハンガリアンに見えてきてしまいます。


はい、こちらが正しい認識です。IDE で自動的に色分け・書体分けできるようなものはシステムハンガリアンであると考えたら分かりやすいと思います。逆に、論理座標、物理座標などの接頭辞はシステム設計ドメインで定義されるものですから、IDE での色分けなどできません。このようなものがアプリケーションハンガリアンとなります。

引用:

なので、以前の発言どおりとってもグレーな問題だと私自身は考えています。


そもそも論点はそこじゃないと思うんですよね。

引用:

「s_ とかをつけるんだとしたら、典型的なシステムハンガリアンの一つですよね。」という返答は期待通りの反応であり、ここから、アプリケーション ハンガリアンとするためにどのような注意が必要かわかっていない、ということがわかります。


Jitta さんは、このように発言されていますので「Shared キーワードで修飾されている変数に s_ を付けるのはシステムハンガリアンである」ということに異論はないのだと思います。

私は Jitta さんの上記発言を次のように解釈しました。「静的メンバに s_ を付けるとシステムハンガリアンになってしまいます。そうではなく、別の視点・区分けで適切な接頭辞を付けることでアプリケーションハンガリアンにすることができます。あなたはアプリケーションハンガリアンにするための注意点が分かっていない。」ということを Jitta さんは言いたいんじゃないですかね。この解釈どうですか、Jitta さん?

それに対して私は「そんなことができる接頭辞が存在するんですか?」と質問しています。たぶん、質問者の武史さんが聞きたいことも似たようなことだと思います。s_ を付けるのではシステムハンガリアンになってしまう、アプリケーションハンガリアンにするためにはどうしたらいいんだろう?どうやら Jitta さんは、アプリケーションハンガリアンにするための注意点を知っているようだ、と。


私が認識している セラフさんと Jitta さんの主張

[セラフさんの主張]
Shared 修飾子は厳密には型ではなないのでシステムハンガリアンには含まれないという見方もできる。非常にグレーな問題なのだ。

(↑みんな分かってる。そんなこと議論してるんじゃねーしw)

[Jittaさんの主張]
s_ を付けたらシステムハンガリアンになってしまう。s_ を付けるという発想自体が、アプリケーションハンガリアンにするための注意点を分かっていないということだ。

(↑で、どうやったらアプリケーションハンガリアンになるのw)


どうですかね? Jitta さん、武史さんの意図確認を待たずに私が勝手に解釈したことを書いているので、もしかしたら大ハズレしてるかもしれません。けど、私の解釈が間違っていなければ、セラフさんの書き込みは、まったく、Jitta さんの発言の補足になっていないし、アプリケーションハンガリアンに関する武史さんの疑問に答えるような内容にもなっていないということになります。Jitta さんが「いいえ、違います。」と否定した意味を、セラフさんは正しく解釈できていないのではないでしょうか。
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-01-06 15:23
そんなに嫌わなくてもいいじゃないかw
引用:

未記入さんの書き込み (2009-01-06 14:51) より:
Jitta さんが「いいえ、違います。」と否定した意味を、セラフさんは正しく解釈できていないのではないでしょうか。


かも知れませんね。

ただ、Jittaさんの「いいえ、違います。」と否定した後「何でもかんでもに付けるのではなく、区別しなければならないものにだけ付けます。 」とあったので、「s_」をアプリケーションハンガリアンだと解釈してしまって、何でもカンでもじゃないSharedな変数に「s_」を付けたらいいじゃんってことだと思ってしまいました。

浅はかすぎますか・・・すいません。
q
ベテラン
会議室デビュー日: 2009/01/06
投稿数: 54
投稿日時: 2009-01-06 15:33
(利用規約違反のため削除いたしました。@ITクラブメンバーシップセンター)
spy
会議室デビュー日: 2009/01/06
投稿数: 5
投稿日時: 2009-01-06 19:07
http://d.hatena.ne.jp/busaikuro/20081209#c1231226001
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-01-06 22:36
引用:

未記入さんの書き込み (2009-01-06 01:03) より:
時間が経過して記憶があやふやになっていませんか?


 はい、実は「なんだったっけ?」と思うところもあります。しかし、ぶれていないものもあります。それは、2008-12-30 23:00 の「もしかして shared キーワードを理解せずに使っているのではないか?という疑問がわき」です。「静的メソッドを使うべき状況で使っていなかった」とは思っていませんでしたが、静的メンバーの使い方を誤っているのではないかという思いは、当初から持っています。

引用:

質問者の「s_ とかをつけるんだとしたら、典型的なシステムハンガリアンの一つですよね。」という投げかけに、Jitta さんは「いいえ、違います。」と答えていますよね。でも、s_ を付けるのはシステムハンガリアンです。これには Jitta さんも異論はないでしょう。そうすると、Jitta さんの「いいえ、違います。」という発言は「システムハンガリアンである」という部分を否定していたのではなく、s_ を付けるという方法自体を否定していたと読むことができます。つまり、「s_ を付けるのではなく、もっと上位(応用)概念の接頭辞を付けろ、それがアプリケーションハンガリアンというものだ」ということを言いたかったのですかね?


 おっしゃりたい内容が、よくわかりません。私は、こう書きました。
引用:

いいえ、違います。何でもかんでもに付けるのではなく、区別しなければならないものにだけ付けます。
今回の場合、クラス変数は全てのインスタンスで同じ値を参照するようになりますから、本当はインスタンスによって分けなければならない変数をクラス変数にしてしまっている場合、または、複数のインスタンスで値を共有しているのだから、値を変えてはいけないところで変えようとしている場合に、「間違えたコードを間違えて見えるように」することができます。
(斜字体は、引用時に追加)


 「何でもかんでもに付けるのではなく、区別しなければならないものにだけ付けます」という点を強調したいと思います。もし、「静的メンバーだから s_、ローカル変数だから l_、インスタンス変数だから i_」とするなら、システム ハンガリアンに成り下がるでしょう。そうではなく、共有メンバー、および共有メンバーにアクセスするメソッドだけに、「これは共有メンバーです」「これは共有メンバーを操作します」という印を付けるなら、それはアプリケーション ハンガリアンではないでしょうか。アクセスするときに気をつけなければならないものに、なぜ気をつけなければならないかがわかるような接頭辞を付けること。それが、アプリケーション ハンガリアンだと思います。「共有変数だから s_」ではなく、「共有変数は、インスタンス間で値が共有されるため、インスタンスからアクセスするときには気をつけなければならない。だから、共有変数であることがわかるように s_」です。


 ああ、2009-01-06 14:51 で、おっしゃりたいことがわかりました。
 こう言えばいいでしょうか。「共有変数は、インスタンス間で値が共有されるため、インスタンスから書き換えるときには気をつけなければならない。」ということが当たり前である人にとっては、共有変数であることを示す接頭辞なり接尾辞は「システム ハンガリアン」です。しかし、質問者さんに関しては、1ページ目の 2008-12-24 16:12 を見る限り、共有変数に対する理解が同じではないと判断しています。そういう人に対しては「アプリケーション ハンガリアン」と呼んでもいいのではないでしょうか。

 対象者によって言葉の意味を変えるのは反則ですね。すみません。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-01-06 22:57
まず、wikiに『ハンガリアン記法に二種類あることはあまり知られておらず、単に「ハンガリアン記法」
と言及された場合でも、システムハンガリアンという意味で用いられることが多い』とあるように、
「ハンガリアン記法」という言葉自体が曖昧なため、私のこの発言では
「変数名やクラス名などの識別子に特別な接頭文字、または接尾文字をつけること」を
「広義ハンガリアン記法」と書くことにします。

「アプリケーションハンガリアンは、間違えたコードを間違えて見えるようにする記法である」は、
「アプリケーションハンガリアンは、間違えたコードを間違えて見えるようにする広義ハンガリアン記法である」
という意味です。この時点で(また、これ以降のアプリケーションハンガリアンの説明においても)
データ型については言及されていません。

つまり、sharedな変数につけようが、s_とつけようが、間違えたコードを間違えて見えるようにする
ものであれば(そして広義ハンガリアンであれば)「アプリケーションハンガリアン」である。
システムハンガリアンかどうかと、アプリケーションハンガリアンかどうか、は独立した話である。

元々、シモニーの意図していた記法がアプリケーションハンガリアン、
後に、誤解されて生まれた記法がシステムハンガリアン、なのですから、
アプリケーションハンガリアンかどうかが、システムハンガリアンかどうかに依存しない。

というのが私の理解です。

http://en.wikipedia.org/wiki/Hungarian_notation
私はこれを100%理解するほどの英語力はありませんが、
英語版の方が詳しく書いてありそうです(日本語版は「書きかけ項目」です)。

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