- KotorinChunChun
- 8370
- 15
- 1
- 0
@_reime はい先のツイートも拝見した上で、あれーと思いツイートしました。 前後の説明がどうなっているか分からないし部分的な話になってしまうので、是非については何とも言えないのですが、逆に混乱してしまうのではないかと思いました。 確かに同じと言えばそうですが、あえてそう呼ぶかと言う話ですね。
2020-02-25 00:26:29@_reime @yamaoka_ss オブジェクトのインスタンス変数(属性)を外(使う側)からみた概念を「プロパティ」と呼ぶのは割とありますかね。パフェクVでもこれにならっていると思います。ややこしいかもですがオブジェクト、インスタンスあたりと同じで同じものを見方により違う名前で呼ぶことは結構おおいいですね。
2020-02-25 00:32:03@hoehoe1234 @_reime ここでは「プライベートプロパティ」ですから、外から見た概念ではなくなってますね。 何にしろ、読み手の人達が混乱しているようにも見受けられました。
2020-02-25 00:42:37@_reime @yamaoka_ss 私も、動作の面からも「(プライベート)プロパティ」と呼ぶよりは、「変数」あるいは「フィールド」と呼ぶ方が適当だと思います。
2020-02-25 07:42:19@_reime @yamaoka_ss 自分のVBAのプロパティの定義が以下になります。 他のプロシージャ(以降P)の参照渡しの引数に渡してPの中で変更したとき 元の値に影響しないものが プロパティ 元の値に影響するものが 変数(フィールド) Public変数が「プロパティ」として振る舞うことはありますが、Private変数は無いので違うかなと
2020-02-25 07:45:41@nukie_53 @_reime なるほど、その説明は明確ですね。 少なくとも同じものではないことは明白ですし、 私としては一般的に認知された呼び方ではないのに、初心者(と思われる人達)が躓いているのを見ると、無用な混乱を招いているだけな気がしました。
2020-02-25 10:20:46オブジェクトブラウザでプライベート変数はプロパティと同じアイコンになるから
プライベート変数って、オブジェクト ブラウザーではプロパティのアイコンではなかったか。 twitter.com/_reime/status/…
2020-02-25 06:42:31@yamaoka_ss で、今パーフェクトVBA見たら確かにオブジェクトモジュールのプライベート変数を「プライベートプロパティ」って呼んでいるので、 プライベート変数をプライベートプロパティと呼ぶのは一般的なのかな?と思い呟きました。 pic.twitter.com/ylTJUz8Y34
2020-02-25 00:21:57@akashi_keirin おっしゃる通りです。 その挙動から、Microsoftの開発者は「プロパティである」と考えて開発したと想定しました。
2020-02-25 08:19:56@ntakahashi0505 @akashi_keirin 高橋先生に失礼を承知でここに書かせて頂くのですが、このような理解で宜しいのでしょうか。 もし間違った理解であればご指摘頂けますと大変幸いに思います。お忙しいところ大変恐縮ですが、何卒宜しくお願い申し上げます。参考にさせて頂いたしたサイトは tonari-it.com/excel-vba-prop… になります。 pic.twitter.com/cQ9lr7BcbG
2020-02-25 12:20:38@amurorei55 @akashi_keirin 私の「プロパティかどうか」の判断基準はもっとシンプルで、オブジェクトブラウザで見たときに、「プロパティのアイコンがついているかどうか」ですね。
2020-02-25 12:29:47VBAの Me. はポンコツ。外部に公開しているメンバしか使えない。
@ntakahashi0505 ただ、「プロパティ」を名乗るくせに、モジュール内部でも Me.Hoge みたいに書けないのはわかりにくいですね……😰 pic.twitter.com/7qxGEHHt9r
2020-02-25 10:31:21@ntakahashi0505 そうなんですよ。『VBA Developer's Handbook』では、「Meを使えば、お前が作ったクラスを使用するやつらみたいな感じでプロパティやメソッドが使えるんだぜ!」みたいな説明がされていたような記憶があります。(うろ覚えですが😰)
2020-02-25 11:08:24以下、ほえほえ氏の連弾ツイート
ちゅんさんのプロパティの話しみた。確かにオブジェクトブラウザのアイコンで判断するのはあるいみ一貫性があるとおもう。気が付かなかった。もうひとつ、meが標準モジュール内では使えないのは何となく分かるんだよね。実装はわからないけどおおまかには、
2020-02-26 00:07:28クラスの原型⇒操作⇒クラスモジュール⇒new⇒インスタンス(モジュール変数が参照型変数の参照先に確保されている。これがMeで参照できる) 標準モジュールの原型⇒操作⇒標準モジュール(この時点ではモジュール変数が参照型変数で参照される領域に確保されていない)⇒なのでMeは使えない。
2020-02-26 00:09:59Javaなんかだとわかりやすくてthisが指すのはヒープ上のインスタンス変数領域。つねにthisは機能する。VBAの場合はお味クヒープ上にインスタンス変数が確保されて(クラスをnewした場合のみ)meが届くのはここで、クラス|標準モジュールの管理はランタイム内の話なのでmeからは見えないんだとおもう。
2020-02-26 00:12:26それとは別に、newしたインスタンス内で、privateモジュール変数がme経由で見えないのはどうしてかな?セキュリティ上の問題があるのか、実装上、privateはオブジェクト指定の変数テーブルアクセスではスコープに入らないようにしてるとか(Pythonでもこういうのあるよね。クラス変数でw)
2020-02-26 00:19:15これはクラスモジュールでのテストなので標準モジュールでも同じだとおもう。結局、meコンテキストはnewされたインスタンスにしか適用できないような縛りがある。というか標準、クラスモジュールとnewされた型は違う。クラス、標準モジュールはメタクラスといっていいかも?なのでmeは使えない。 pic.twitter.com/HaP3Yllq44
2020-02-26 00:33:09この解釈があっているかどうかはわからないけどオブジェクト指向ででてくるtypeとobjectの関係に似ている。標準、クラスモジュールの型はコンポーネントであり、newされたインスタンスの型はnewに使用されたクラスの型となる。この後者の方でのみmeコンテキストは使えるのだとおもう。
2020-02-26 00:35:35Excel VBAでよく使うプロパティの利用例
(……きこえますか…きこえますか…VBAのPropertyが難しいと感じてる方… 今… あなたの…心に…直接… 呼びかけています…シートモジュールに…セルの値を読み書きする…自作プロパティを生やすのです…そのシートのオブジェクト名を変えて…標準モジュールから呼び出すのです……)
2020-02-24 15:52:52