■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
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 名前: 投稿日: 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;