- - PR -
shared な変数の参照
投稿者 | 投稿内容 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-01-07 01:33
以前に私が書かせていただいたアプリケーションハンガリアンの
定義だと、kind という、あいまいな言葉などもありましたので、 それらを踏まえて、もう少ししっかりとした定義をするならば、
という感じではないかと思います。 一つ目の文は、kind という曖昧な単語を、より具体的に「意味や属性」に変えてみました。 二つ目の文は、「誤ったものを、誤って見せる」といわれる部分を 具体的にしてみました。 原論文(http://www.parc.com/about/history/publications/bw-ps-gz/csl76-7.ps.gz)の 39 〜 45 ページにも、この辺りの記述があります。 この中では、私の読解力の範囲では、単一の代入、演算についての type checking が扱われています。 その事から、前後関係によらず、判別が演算、代入程度で も分かるぐらいが定義として適切かと思いました。 「静的メンバであるかどうか」は、そもそも、静的である事を 明示したとしても、静的メンバに対するアクセスが 前後関係によらず不正であるかどうかの判別が容易なケース というのが、私には思いつきませんでした。 そのため、「静的であること」を前置詞で示すのは、理解の助けには なるかと思いますが、「誤ったものを、誤って見せる」という 原論文の目的にもかなっていないように感じます。 参考
| ||||||||||||||||||||||||||||
|
投稿日時: 2009-01-07 03:01
長いですよ。
意味が分かりません。どういうことですか? スタティック変数に s_ を付けるだけならアプリケーションハンガリアンだけど、さらにローカル変数とインスタンス変数にも接頭辞を付けたらシステムハンガリアンに変化するという主張ですか? だとしたら私は同意できません。「何でもかんでもに付けるのではなく、区別しなければならないものにだけ付けます」を実践するとアプリケーションハンガリアンになるなんて主張はトンデモナイ。そんなことを言ったら、64ビット整数に l を付けなければ、32ビット整数に i という接頭辞を付けても、それはシステムハンガリアンではなくアプリケーションハンガリアンになるということになりませんか?
前文の否定と後文の肯定の違いが私には理解できません。「共有変数だから s_」と「共有変数であることがわかるように s_」というのは日本語としての意味合いに違いがあるのですか? 私には何が違うのか理解できません。「インスタンス間で値が共有される」「インスタンスからアクセスするときには気をつけなければならない」いずれも共有変数であるという事実から導かれるものです。
なるほど。つまり、本人の理解・意識の問題だということですか。武史さんにとって、s_ がシステムハンガリアンに見えるのは本人の意識の問題だと。「いいえ、違います。アプリケーションハンガリアンだと信じればアプリケーションハンガリアンに見えてくるはずです。」ということが言いたかったのですね。 「ありがとう」という紙を張って感謝の気持ちを込めて水を凍らせると綺麗な結晶の氷ができるそうです。「ばかやろう」という紙をはって水を凍らせると不恰好な結晶になるんだそうです。Jitta さんの言っているのはそれと同じことですよね。Jitta さんの話はただのオカルトだと思います。正直、呆れました。
反則とかそういうことじゃないんです。100万歩譲って、初級者にとってはアプリケーションハンガリアンだったとしましょう。でも、上級者にとってはシステムハンガリアンなのですよね。 Jitta さんは「システムハンガリアンは非推奨では?」という(上級者の)反論を想定して「アプリケーションハンガリアンだと思います。」という先手を打っておいたと言っていましたよね。これ、おかしくないですか?上級者から見ればシステムハンガリアンだというのなら、Jitta さんの「アプリケーションハンガリアンだと思います。」という発言は、(上級者に対して)なんら牽制・先手としての意味を持たないことになってしまいます。
Jitta さんはいまだに言い訳を続けているか、真性の馬鹿か、どちらかだと思います。いずれにせよ、私や、武史さん、他の読み手に対して誠実に、そして正直に対応しているとは思えません。寛容な私も、さすがにこれ以上、Jitta さんの相手を続けることはできません。あきらめます。 最後に Jitta さんに一言。Jitta さんは素で振舞っていても、十分に反面教師としての素質を持っていると思います。ですので、Jitta さんは「先生ごっこ」をする必要はまったくないです。質問者に疑問を持って欲しかったとか、あえて言葉を少なめに話したとか、本当におこがましい。Jitta さんには反面教師としての素質がありますから、良い教師であろうと心掛ける必要はまったくありません。それどころか、反面教師が良い教師ぶると害悪を撒き散らすだけです。 自分に何ができるのかをわきまえてください。先生ごっこをするのは、それからでも遅くはありません。質問者に対して先生として接したいのであれば、まず、(知識や技術ではなく)誠実であることを心がけてください。(私のようにw)
アプリケーションハンガリアン = 広義のハンガリアン システムハンガリアン = アプリケーションハンガリアンの部分集合 という主張ですかね? そうだとして「静的メンバに s_ を付けるのはアプリケーションハンガリアンである」ことを仮に認めたとしましょう。そうした場合でも、あなた自身が「システムハンガリアンかどうかとは独立した話である。」「システムハンガリアンかどうかに依存しない。」と言っているので、まだ「静的メンバに s_ を付けるのはシステムハンガリアンである」という命題が真である可能性は残されます。 そして、この命題を真だと考える人はそれなりの数いて、「s_ を付けるのはシステムハンガリアンだから使うべきではない」という謗りを受けることになるでしょう。 システムハンガリアンとアプリケーションハンガリアンが独立した話であるというのなら、このようなシステムハンガリアンに対する批判を退けるためには「s_ を付けるのはアプリケーションハンガリアンである」ということを主張しても意味はありません。「s_ を付けるのはシステムハンガリアンではない」ということを主張しないとね。 そして、Jitta さんの文中から読み取れるのは「システムハンガリアンではない」ということではなく「アプリケーションハンガリアンである」ということです。Jitta さんが、アプリケーションハンガリアンとシステムハンガリアンを背反な関係であると考えているのであれば「アプリケーションハンガリアンである」という主張は「システムハンガリアンではない」と等価になり、「システムハンガリアンを使うべきではない」という主張を退けることができます。 しかし、Jitta さんが、べるさんと同じように、アプリケーションハンガリアンとシステムハンガリアンは背反の関係ではなく独立した話だと考えているのであれば、「アプリケーションハンガリアンである」という主張は「システムハンガリアンではない」という意味にはなりません。そうすると「システムハンガリアンを使うべきではない」という主張を退けることはできないということになります。 私は(セラフさんの言うように判断がグレーな部分はあると思いますけど)アプリケーションハンガリアンとシステムハンガリアンは背反だと思っていますから、「どうやったらアプリケーションハンガリアンになるの?」と質問していますけど、これの意味するところは「なぜシステムハンガリアンではないと言えるの?」ということです。 べるさんが、アプリケーションハンガリアンとシステムハンガリアンが背反ではないと考えていて、Jitta さんを助けようとか私や武史さんの疑問に答えようとするのなら「アプリケーションハンガリアンである」ではなく「システムハンガリアンではない」ということを説明しないと意味がないと思います。 | ||||||||||||||||||||||||||||
|
投稿日時: 2009-01-07 03:02
なにこれ? 別に好きにしたらいいとは思いますけど、この会議室にも書き込みをしていて、あちらにも書き込みをしていたりする人もいますね。いやらしい…。下品ですねえ。 時間がないので、流し読みしかしていませんが、ちょっとだけ反応しておきます。
反語じゃないですよ? 「あなたは日本語を母国語としている方でしょうか? いや、日本語を母国語としているはずがない。おまえは○○人に違いない。この非国民め!」といった感じで、日本語を母国語としていることを否定する意図を持って疑問文を投げることを反語といいます。 私の意図したところは、「あなたは日本語を母国語としている方でしょうか?当然、日本語を母国語としているんだろう。だったら、ちゃんと日本語で説明しろよ。糞野郎!」ということです。ね、反語じゃないでしょう? 違いが分かりますか? 反語として捉えた場合は、日本人ではない外国の人を非難する意図が出てきますから差別意識(日本人としての選民意識とかw)を持っていると見られる可能性もあるとは思います。ですが、私は外国人ではなく日本人を非難しています。これの何が差別にあたるというのですか?
べるさんの言っていることも同様に理解できません。私が非難しているのは「日本人のくせに日本語をちゃんと話そうとしない馬鹿」です。私には「日本語を上手に話せない外国人」を見下すような意図はありません。私の書いた文章から外国人を見下すような意図が見えるんだとしたら、それこそ読解力がないとしか言いようがありません。 差別でなくとも失礼だという意見もあるようですね。私は礼には礼で答えますよ。日本人のくせに、なんの説明も添えず、リンクとアンカーテキストだけを提示。他にも何か書いたのかもしれないけど編集して残ったのはこれだけ。この程度のしょうもない人間には、あの程度の対応でいいんですよ。 それなりに社会生活に適応できている人間は、適切に礼儀をわきまえられるものです。(もちろん私もw) 他人の行為が失礼だと感じたのだとしたら、その人にとってあなたは「別に失礼だと思われてもいいや」と感じられていると思ったほうがいいです。失礼にあたるかどうかというのは発言や行動の結果ではなく、人間関係や気持ち(誠意)に依存していることが多いです。一部の人が私の言動を失礼だと感じるのは仕方のないことです。だって、私が一部の人に対しては礼を尽くしていないんだもの。 相手が礼を尽くさないことを非難するのもいいけど、なぜ、相手が礼を尽くしてくれないのか考えてみるのもいいんじゃないですかね。 | ||||||||||||||||||||||||||||
|
投稿日時: 2009-01-07 03:45
こんばんは。すっかりハンガリアンの話で盛り上がっちゃってますが、別件で気になる点があったので横から失礼致します。
元々は、ローカル変数とインスタンスメンバと静的メンバを見分けやすくしたいってとこから始まってるわけですよね。 で、武史さんは、静的メンバとローカル変数で記法をそろえるよりインスタンスメンバと静的メンバで記法をそろえる方が良いと思い、2003ではMeで見分けていたのですね。 私は、静的メンバにMeでアクセスすることにはすごく違和感を感じます。 なぜなら、冒頭でじゃんぬさんも触れられてる通り、Meは自のクラスのインスタンスを示すので、インスタンス化しなくてもアクセスできる静的フィールドは、領域的にMeの外側にいるわけで。意味合い的には2003のMeでアクセスできてしまう仕様は変で、警告が出るようになったのは改善だと思ってます。
(ローカル変数でなく)インスタンスメンバである事を 明示したとして、インスタンスメンバに対するアクセスが 前後関係によらず不正であるかどうかの判別が容易なケース というのは思いつきますか? スコープの広さと変数のkindは別問題では?そして、スコープの広さの差異という点では静的メンバとインスタンスメンバのそれはインスタンスメンバとローカル変数以上のものがあります。 意味合いの正しさとかはどうでもよく、とにかく見分けやすくて、インテリセンスが使いやすければいい、ということであれば、クラス名のエイリアスをUsにするってのはいかがでしょう?Meの複数形ってことで。
色はつかないですけど、まぁそれはハンガリアンでも同じですし。 | ||||||||||||||||||||||||||||
|
投稿日時: 2009-01-07 23:10
「アプリケーションハンガリアンに対する私の理解」に近いと推測しています。 (また、「Jittaさんの一連の書き込みに対する私の理解」は 「Jittaさんの一連の書き込みに対するセラフさんの理解」に近いと感じています。) ただし、助けようとか個別の疑問に答えようという意図ではありませんでした。 アプリケーションハンガリアンとシステムハンガリアンが背反であると思っている人と、 背反でないと思っている人がいて、それが議論のつじつまが合っていない元になっているのかと感じました。 誰もそれに明確に言及していなかったので、2009-01-06 22:57の書き込みをしました。 アプリケーションハンガリアンやその周辺の事柄のことを断定的に書く立場にないし、 100%理解しているとも思っていないし、間違っている可能性も当然あるので、あくまでも私の理解と書きました。 「アプリケーションハンガリアンである」⇒「(システムハンガリアンかにかかわらず)使ってよい」 なので「システムハンガリアンではない」ことを説明する必要はないと思います。 (Jittaさんの意図とぴったり一致するかはわかりませんが、私はこう理解しました)
意図がなくても不快に思う人がいるかもしれないということです。 目が見える人に「目、見えてますか?」といったら、目が見えない人は不快に思うかもしれません。 「真性の馬鹿」や「糞野郎」もここで使うべき言葉ではないと思います。 それでも「問題ない」と思っているのならそれはしょうがないですね。 私の最初の書き込みの主旨はあくまで 「アプリケーションハンガリアンは、間違えたコードを間違えて見えるようにする記法である」であり これは日本語です。 細かい説明が必要だが、アプリケーションハンガリアンはこのスレッドの主題でなく、 アプリケーションハンガリアンを短い記述で説明しきるのは不可能なので、 (第一、私が劣化コピーをつらつらと書いても意味が無いので)リンクをはりました。 | ||||||||||||||||||||||||||||
|
投稿日時: 2009-01-07 23:16
(早くガベージコレクションされてほしかった、とでも考えてください) プログラマは、とりあえず使った覚えのある変数にNothingを代入する意図で SomeMethodの末尾のコードを書いたとしましょう。 静的メンバにNothingを代入することが「誤り」だとすれば s_Value1 = Nothing は1行で誤りであると判断するヒントとしての役割をはたしていませんか? もっとも、「誤りである」というものが機械的に定義できない以上は、 その1行が誤りであるかどうかは明確に定義できないと思います。 年をあらわす変数に y 接頭辞、月をあらわす変数に m 接頭辞をつけたとします。 普通、yValue1 + mValue2 のような演算は誤りだと判断できますが、 (占いかなんかで)誕生日の「年」と「月」を足すこともあるかもしれません。 この場合は誤りではないわけですが、だからといって即座にこの記法が アプリケーションハンガリアンではなくなるということはないと、私は理解しています。
アプリケーションハンガリアンではないということになるんでしょうね。 | ||||||||||||||||||||||||||||
|
投稿日時: 2009-01-08 05:53
ありゃりゃ、読み返してみると私見当違いの突っ込みしちゃってますね。
これはハンガリアンに関する意見の一部でしたね。 なんか静的メンバとローカル変数で記法をそろえるよりインスタンスメンバと静的メンバで記法をそろえる方が良いと思ったって話とごっちゃになってしまったようです。ごめんなさい。 ハンガリアンに関しては、私の認識は未記入さんのに近いです。 取り立てて私から言うことは特に無いですけど細かいとこで一点だけ挙げるならば。
kindもtypeも一般的な英和辞典だと両方「種類」と訳せちゃうので確かに紛らわしいですね。 しかし代わりに持ち出した「属性」という単語もこれまた非常に紛らわしいです。参考にしたというwikipediaの文では「使用目的」という単語が使われてますが、こっちの方がしっくりきます。もしくは「用途」とか。 | ||||||||||||||||||||||||||||
|
投稿日時: 2009-01-08 12:54
むずかしい…。
「アプリケーションハンガリアンなら使ってもよい。」 「システムハンガリアンを使うべきではない。」 ここまでは、私とべるさんの認識は一致しているということでいいですよね。 そして、べるさんは上記の2つは背反ではないと考えていて、上記の2つが同時に成り立つ場合は「アプリケーションハンガリアンなら使っても良い。」が優先されるという立場をとっています。 これからのこの主張を崩します。この主張を崩す方法は2つあります。ひとつは「(背反ではないことを認めて)システムハンガリアンを使うべきではないという判断のほうが優先される。」ということを示す方法です。もうひとつは「背反である。」ということを示す方法です。 ■以下、背反ではないと仮定します。 背反ではないと仮定すると、 「アプリケーションハンガリアン = 広義のハンガリアン」 「システムハンガリアン = アプリケーションハンガリアンの部分集合」 が成り立つんですけど、べるさんがこれを否定していますので、まずはこれが正しいことを示します。べるさんは「アプリケーションハンガリアンは、間違えたコードを間違えて見えるようにする記法である」と主張しています。(コード例でもインスタンスメソッド内で、s_Value1 に Nothing を代入するのは誤りであることが分かるからアプリケーションハンガリアンだと言っています。) ここで、私はもうひとつの主張をします。「システムハンガリアンも間違えたコードが間違えて見える」です。これに異論が出るとは思えませんが、念のために例を出しておきます。(C言語ですみません。)
どうでしょうか。sz(文字列)と i(整数)を足しているので、このコードが間違っていることは一目で分かりますよね。べるさんの主張に則って「間違って見えるのだからアプリケーションハンガリアン」に従うと、この sz と i もアプリケーションハンガリアンということになります。 分かりますか?システムハンガリアンでも間違えたコードが間違えて見えるんです。それなのに、間違えたコードが間違えて見えればアプリケーションハンガリアンだということにしてしまうと、すべてのシステムハンガリアンはアプリケーションハンガリアンでもある、ということになってしまうのですよ。 「アプリケーションハンガリアン = 広義のハンガリアン」 「システムハンガリアン = アプリケーションハンガリアンの部分集合」 べるさんは結局このように主張していることになるのです。これを否定するためには「システムハンガリアンだがアプリケーションハンガリアンではない」という例を示さなければなりません。 あとは「背反ではない」の矛盾点を示します。「システムハンガリアンを使うべきではない。」という命題を「システムハンガリアン = アプリケーションハンガリアンの部分集合」を使って書き換えると、 「アプリケーションハンガリアンの一部を使うべきではない」 となります。つまり、最初に挙げた 2つの命題は 「アプリケーションハンガリアンなら使ってもよい。」 「アプリケーションハンガリアンの一部を使うべきではない。」 となります。このとき「アプリケーションハンガリアンなら使ってもよい。」を優先する立場をとると「アプリケーションハンガリアンの一部を使うべきではない。」は成立するケースがない無意味なものとなりますので、「アプリケーションハンガリアンなら使ってもよい」を優先することが誤りであることが分かります。 以上のことから、背反ではないと仮定した場合は「使ってもよい。」より「使うべきではない。」が優先されることが示されました。「使うべきではない」が優先されるのですから「使うべきではない」に該当しないこと、つまり「システムハンガリアンではない」ということを示さないと意味がありません。 ■背反ではないという仮定のお話はここまでです。 ・背反ではないというのなら「使うべきではない」が優先されるので「システムハンガリアンではない」ことを説明する必要があります。 ・背反であれば、どちらかしか成り立たないので優先関係は存在せず、「アプリケーションハンガリアンである」もしくは「システムハンガリアンではない」のいずれかを説明すれば十分です。 ・「使ってもよい」が優先されることを説明できれば、「システムハンガリアンではない」ことを説明する必要はありません。 |