■掲示板に戻る■
■過去ログ倉庫めにゅーに戻る■
JavaでProperty
- 1 名前: D使い 投稿日: 2000/09/26(火) 00:46
- どーしてJavaには「プロパティ」がないんでしょう?
Beansはネーミングルールでプロパティ(もどき)を実装してるらしいですが、
それだとコーディングするときには使えないですよね?
個人的にはDelphiみたいに直接private変数に割り当てることができるのが
いいと思います。
C#で唯一いいと思ったのがプロパティのサポートだったので・・・
言語仕様拡張もまだ間に合うと思うのですが、OO的には美しくないんでしょうか?
勘違いしてたらすんません。
- 2 名前: Java使い 投稿日: 2000/09/26(火) 01:30
- すいません。前から思っていたのですが、
Delphi使ったこと無いので”プロパティ”と呼ばれるものが
どんなものなのかわからないっす。どなたか解説お願いします。
- 3 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/09/26(火) 01:38
- Windowsで右クリックメニューから(略)。
- 4 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/09/26(火) 01:38
- プライベート変数へのアクセスを行っているような関数らしいです。
C#ではset/getって、今月のJavaWorldで立ち読みしました。
- 5 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/09/26(火) 01:43
- >4
あららら。
それはC++/Javaでは普通にやってること(当然やらなきゃいけないこと。
サボると後で偉い目にあう可能性ありなこと。)ジャン。
- 6 名前: >5 投稿日: 2000/09/26(火) 02:36
- ただ、getXX,setXX関数を作るかわりに文法的なサポートがあって
楽だって事。
演算子のオーバーロード同様いわゆるシンタックスシュガーってやつですか?
- 7 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/09/26(火) 02:42
- >5
所謂、
a.setHoge(30)
ではなくて、
a.hoge=30;
とかき、実装のほうではset関数の中でprivateにアクセスするらしいですが
もしかしたら、違うことを行っているかもしれません。
- 8 名前: 7 投稿日: 2000/09/26(火) 02:45
- ちなみに、
int i=(int)a.hoge;
とすると、aのget関数がprivateのhogeをかえすらしいです。
- 9 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/09/26(火) 04:12
- らくちんでいいかも
- 10 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/09/26(火) 07:16
- 楽だぞ。
厳密には(C++Builder使いなのでDelphiの記述はとっさに出てこないが)
int GetInt();
void SetInt();
__property int Int = { read = GetInt, write = SetInt };
とか書く。
意味は想像付くよね。
- 11 名前: D使い 投稿日: 2000/09/26(火) 08:11
- 10の補足
ちなみに GetInt() と SetInto() はprivate
- 12 名前: D使い 投稿日: 2000/09/26(火) 08:18
- ん? void SetInt(int Value); だな。
- 13 名前: 名無しさん 投稿日: 2000/09/26(火) 10:22
- property
1)無理に関数化しなくていい やっぱり関数化した方がいいやとなった時点
で関数化すればいい。そして変更しても外部のソース変更は不要
2)実行時型情報とセットになって、いわゆるDelphiのコンポが出来ている
実行中にプロパティ一覧とかを自分で制御出来るので、上手く利用すると
結構面白い使い方も出来る(たとえば自作マクロからの制御とか)
- 14 名前: 名無しさん 投稿日: 2000/09/26(火) 12:35
- Rubyのattrみたいなもんすか?
>attr(name[, assignable])
>そのモジュールをインクルードするクラスのインスタンスに対して nameという属性とそのアクセスメソッドを
>定義します.
>アクセスメソッドを再定義することで属性の挙動を変更できます.
- 15 名前: >14 投稿日: 2000/09/26(火) 13:03
- nameに値を設定するときのコードは?
PropertyがGoodなのは、クラス書き換えるだけで、
”ただの変数←→Setメソッド”を逝き来出来ること。
設定・・・Obj.PropI := a;
クラス(ただの変数)・・・PropI: integer;
クラス(Setメソッド)・・・Property PropI: integer read SetPropI write F_PropI;
- 16 名前: 10 投稿日: 2000/09/26(火) 14:25
- いけね、SetIntの引数忘れてたぜ。>>12
完全にinlineで展開するので、propertyに相当する関数は無いんだよね。
15の例だと
this.Prop ;= 10 → this.SetProp(10)
として扱ってくれる。バイナリもそうなっている。
一方
foo := this.Prop → foo := this.F_Prop;
に化ける。
まあこれは表面上はあまり変わってないが、
メンバ関数の実装を1回サボれたぐらいだな。
- 17 名前: 15 投稿日: 2000/09/26(火) 17:38
- ゴメン。この方が良かったよね。
クラス(ただの変数)・・・Property PropI: integer read F_PropI write F_PropI;
クラス(メソッド張付け)・・・Property PropI: integer read GetPropI write SetPropI;