- PR -

shared な変数の参照

投稿者投稿内容
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-01-09 22:04
あらホントだ。

引用:

さて、Me を使うのが大好きな私が言うのもなんですが、
インスタンス変数か、静的変数かどうかを区別するのは、
Jitta 氏も、「初級プログラマーにとってのみ、
s_ をつけるのは、アプリケーションハンガリアンである」という主旨の
事をおっしゃっていますし





引用:

Me をつけるか、クラス名をつけるかで判別すべきというのが、
ここまでの一定の結論として出ているのではないでしょうか。



を勝手に分けて脳内変換しちゃってますね。すいません。

未記入氏の仰るとおりですね。武史氏ごめんなさい。
q
ベテラン
会議室デビュー日: 2009/01/06
投稿数: 54
投稿日時: 2009-01-10 10:04
(利用規約違反のため削除いたしました。@ITクラブメンバーシップセンター)
q
ベテラン
会議室デビュー日: 2009/01/06
投稿数: 54
投稿日時: 2009-01-10 10:08
(利用規約違反のため削除いたしました。@ITクラブメンバーシップセンター)
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2009-01-11 14:25
引用:
つまり、必要のあるケースがある事は否定しないが、一般的には、
誤りであるなど、慎重に行うべきケースが多いという事です。

そうですね。命名規則がコードの正しさを保障しないということは下記の一番下でも述べられています。
http://msdn.microsoft.com/en-us/library/aa260976.aspx

ポインタに int を足すのもが誤りかも、そのときによるんでしょうね。
(.NET以前の開発に疎いので詳しい事情は知りませんが)

引用:
逆にシステムハンガリアンが、開発環境などの発達で不要になってきたように、
アプリケーションハンガリアンも、そのうち不要なものになってしまうのかも
しれないし。

そうですよね。
特に賛成するわけではないですが(というか深く理解してません)こんな記事もあります。
http://www.maroontress.com/Hungarian/

.NETの場合、属性(System.Attributeを継承するもの)がうまく使えたりしないかなぁと思っています。

引用:
ちなみに、私はアプリケーションハンガリアンは、原則反対派です。

私も原則反対派です。私の場合、ルールは守られなくなっていくことが多い、というのが主な反対理由ですが。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2009-01-11 23:23
引用:

武史さんの書き込み (2009-01-09 17:03) より:

インスタンス変数か、静的変数かどうかを区別するのは、
Jitta 氏も、「初級プログラマーにとってのみ、
s_ をつけるのは、アプリケーションハンガリアンである」という主旨の
事をおっしゃっていますし

引用:

Me をつけるか、クラス名をつけるかで判別すべきというのが、
ここまでの一定の結論として出ているのではないでしょうか。


後半部分に異論はありませんが私の中では前半部分と後半部分は文章として繋がりませんね。
未記入さんはJittaさんのその意見は間違っていると指摘されてますし、私も同意見でしたので。

引用:

べるさんの書き込み (2009-01-09 13:45) より:
記法Aが広義ハンガリアンであることをみたし、
あるアプリケーションにおいて、記法Aが間違えたコードを間違えて見えるようにしている場合、
記法Aのことをアプリケーションハンガリアンと呼ぶ、と理解しています。
「あるアプリケーション」は具体的過ぎますが、「あるチーム」とかでもよいでしょうか。
(「上記のようなアプリケーションが存在する場合、記法Aをどこでもアプリケーションハンガリアンとよぶ」という意味ではありません。)


あーなるほど、べるさんやJittaさんは「アプリケーションハンガリアンでもあり、且つシステムハンガリアンでもある」という状態を許容しているのですね。

私はシステムハンガリアンはアプリケーションハンガリアンに対し区別され得るものであろうというのが基本的な考え方としてあったので、ここがずれてたですね。何故そう考えたかというと、もともと「システムハンガリアン」「アプリケーションハンガリアン」という単語自体が区別するために生まれたものだと思ったから。なので、この状態を許容しちゃうと、単語が生まれた目的そのものを否定することになっちゃうのかな、と。

ただし、ここでいう「区別」は「正しいか否か」ではなく、「考案者の意図と異なるか否か」です。

しかし、言語の高級化によって「アプリケーションハンガリアンでもあり、且つシステムハンガリアンでもある」という状態は普通に発生し得るようになっちゃったのかもしれませんね。ある言語で、意味や使用目的を含んだクラス名が在ったとして、その部分を接頭辞に持ってきたら成立しちゃいますもんね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-01-12 11:36
引用:

未記入さんの書き込み (2009-01-07 03:01) より:


 ありがとうございます。モヤモヤがはれました。

 「ちがいます」と、強く否定しているわりに、「本当にアプリケーション ハンガリアンって言っていいのか?」と思っていました。
それは、「アプリケーション ハンガリアンだ」とする根拠を、「間違ったコードを間違って見えるようにする」においていたためです。
しかし、これを良く読むと、「間違ったコードを、間違って見えるようにする」ですね。
共有変数とローカル変数の区別がつかなくて困るような状況は、「間違ったコード」ではなく、「間違った設計」と言えるでしょう。
そうすると、「共有変数であることを示す接頭辞を付ける」のは、「間違った設計を間違って見えるようにする」ためであり、「アプリケーション ハンガリアンではない」ということになりました。
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2009-01-12 16:56
引用:

後半部分に異論はありませんが私の中では前半部分と後半部分は文章として繋がりませんね。 未記入さんはJittaさんのその意見は間違っていると指摘されてますし、私も同意見でしたので。



武史さんは Jitta さんに 1ミリも同意していないと思います。「Jitta 氏も○○という主旨の事をおっしゃっていますし」という発言は、Jitta さんの意見に同意しているということではなく、Jitta さんの発言には根拠・価値がないということを言っているのでしょう。

静的メンバを明示する方法として以下の意見が出ました。

(1)クラス名を付ける方法(別名を付けて短くする方法を含む)

(2)ハンガリアン記法(接頭辞を付ける方法)

武史さんは当初から(2)の方法は、システムハンガリアンとなるから使うべきではないと考えていたと思います。しかし、Jitta さんがアプリケーションハンガリアンであると主張し、その根拠をはっきりとさせなかったため、武史さんは(2)の方法を否定しきれず結論を保留していたのでしょう。

結局、Jitta さんの出した答えは、初級者にはアプリケーションハンガリアンだと嘘を教えてもいいんじゃないの? という初級者を見下しているとしか思えないふざけたものでした。このような経緯から推測すると、武史さんの「Jitta 氏も○○という事をおっしゃっていますし」という発言は「Jitta 氏は根拠のない意味不明なことをおっしゃっていますし」という意味になるのでしょう。

「(Jitta 氏は静的メンバにハンガリアン記法を使うことを肯定する根拠を示すことができなかったので、) ここまでの一定の結論としては、静的メンバはクラス名を付けて区別すべきということになるのではないでしょうか。」

武史さんの発言を私はこのように解釈しました。
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2009-01-14 13:28
なんか、全体を把握するのが、大変になってきますね。


さて、未記入さん代弁ありがとうございます。
言葉の使い方には、微妙な部分もある気がしますが、おおむね、
未記入さんの解釈どおり、おっしゃるように、Jitta 氏の発言には
未だ同意できていません。

むしろ、Jitta 氏は、まだ接頭辞を付ける事のメリットがある旨の
発言をされているような気がして、理解ができずにいます。

Jitta 氏は、
コード:
Class Foo
	Shared Private a As Integer
	Private b As Integer
	Sub Bar
		Foo.a = b
	End Sub
End Class


というのを、
コード:
Class Foo
	Shared Private s_a As Integer
	Private b As Integer
	Sub Bar
		Foo.s_a = b
	End Sub
End Class


というようにした方が、間違った設計が分かるという利点が
あるというようにおっしゃっているような気がしてなりません。

インスタンス変数と静的変数が、どちらも Me とか、this みたいなので、
参照できる言語であれば、s_ をつける意味がある気がしますが、
VB 2005 で、そのようにする意図が理解できませんでした。


他の方々も、"s_" を付けるのも場合によっては、
アプリケーションハンガリアンとして、正しいのではないか、
という主旨の発言をされている方が多い印象だったので、
自分の理解不足もあるのかもしれませんが。



さて、自分の発言に反応してくれた方をスルーしている
わけじゃないのですが、(実際、スルーしていますが、、)
どうにも書き込みが長く、遅くなりがちなんで、保留していました。
(すでに、十分に長く、遅いですけど)


アプリケーションハンガリアンの定義に「属性」という単語を
使った理由とか、アプリケーションハンガリアンに反対の話とかですね。

今にして思うと、掲示板を分けた方がよかった気もしますが、
そろそろこの板も落ち着いてきたし、当初の目的も終わっている気がするので、
この辺りまでですかね。

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