トップページ⇒tech
81コメント21KB

プロパティがないJavaはJavaScript以下

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
なんでJavaにはプロパティが無いのですか?
しかもパブリックメンバを作らないで
getter、setterメソッドを作れって主張していますね。
そのせいでUMLで設計したプロパティをコードに置き換えると
メソッドになるのはマヌケですね。
JavaScriptにさえプロパティはあるのに
JavaはJavaScriptにまで劣るとしか思えませんね。
0002デフォルトの名無しさんNGNG


ところでさぁ、「○○以上でも、○○以下でもない」っていう台詞よく聞くんだけど

それだったら存在すらできないじゃん?どうよ?
0003デフォルトの名無しさんNGNG
>>1
JavaAPI のカバー範囲>>>>>>>>>>>>JavaScriptのそれ

終了。
0004デフォルトの名無しさんNGNG
確かに OO で設計してると property ほしくなるよなー。
getter/setter にプロパティ変更通知付けたりするとすごい勢いで
行数増えちまう。まぁ作るだけなら Excel とかで出力ツールでも
作れば良いんだけど、コードの可視性悪いし javadoc も読みづらい。
かといって HashMap 化するのも馬鹿げてるし。
0005デフォルトの名無しさんNGNG
おまえら、IDEくらい使えよ。
0006デフォルトの名無しさんNGNG
>>5
IDE が糞コード吐き出す罠
0007デフォルトの名無しさんNGNG
プロパティとパブリックメンバは何が違うのですか?
0008デフォルトの名無しさんNGNG
>>6
setter、getterの糞コードってどんなんだよオイ。
00097NGNG
あ、今はじめて知りました。失礼。
BASIC の、突如現れる変数定義みたいなもんですか。
0010デフォルトの名無しさんNGNG
プロパティーを有効に使った
コードの例を見たいんだけど、
誰か作って。
0011デフォルトの名無しさんNGNG
といことは

D e l p h i

が最強ってことですね。
0012デフォルトの名無しさんNGNG
>>7
外部からのアクセス時に、もしその必要があれば、クラス自身の
責任範囲で各種処理を記述できます。
setterがコールされてプロパティが変更された時に、イベントハ
ンドラへの通知などは、良くやることですよ。
例えば、SwingのsetterメソッドにはPropertyChangeListener
への通知が頻出します。
0013デフォルトの名無しさんNGNG
それなら、setter に入った後において、
イベントの通知タイミングを緻密に設定できる方が優れてると思うんですが。
同期化やら遅延呼び出しやら。
あるいはよその輩を呼びたくないときに protected や private な別の setter を使うとか。
0014デフォルトの名無しさんNGNG
>>13
知障
0015デフォルトの名無しさんNGNG
>>13
そう実装すればいいだけです。そのクラスの実装に責任がある人間が、
好きに実装してください。

突っ込みの意図がわかりません。
0016デフォルトの名無しさんNGNG
幼い者を捕まえて知障だなんて哀しすぎる
0017デフォルトの名無しさんNGNG
Javaってもうすぐプロパティサポートするんじゃなかったっけ?

俺はsetter/getterで充分だと思うんだけど
ごちゃごちゃ機能増やしてほしくねーなぁ
0018デフォルトの名無しさんNGNG
>>2
以上と以下の定義を調べてから書き込めよ。
0019デフォルトの名無しさんNGNG
> Javaってもうすぐプロパティサポートするんじゃなかったっけ?
否
0020デフォルトの名無しさんNGNG
>>18
お前がな
より大きい、より小さいと混同してないか
0021デフォルトの名無しさんNGNG
先生「いいか。おまいら。
  Javaは、Javaであり、それ以上でも、それ以下でも、無いからな〜。
  ココ、試験に出るから、良く憶えておけ〜。」
生徒A「はい、Javaなんて、存在しないも同じって事でしね」
先生「おまいだけは、オブラートに包むって事も憶えておくように。」
0022デフォルトの名無しさんNGNG
特に Java はスレッドを強く意識した言語設計であるわけで
「アトミックに実行」とか言うのが重要視されてませんでしたっけ?
 object.property = value;
とか書くと,メンバ変数 property に value を代入するのが
アトミックに実行できるように思えてしまうけど,
実は裏で setter が走ってるとか泣くっしょ。
同様の理由で
 object.getA().getB().doMethod();
みたいなコードも嫌われるって聞いた事あります。
てか,すいません。あんまし自信ないんでツコミ希望。
0023デフォルトの名無しさんNGNG
なんでJavaScriptはプロパティを導入しちゃったんだろう。
裏切り物め。
0024デフォルトの名無しさんNGNG
>>22
 object.property = value;
とかいてもアトミックに実行できるとは限らない罠
0025デフォルトの名無しさんNGNG
夏厨の季節だと思うと物悲しいよ
0026デフォルトの名無しさんNGNG
だいたいJavaScriptなんて名乗るな
Javaと無関係だろ!
0027デフォルトの名無しさんNGNG
関係なかったらJavaScriptって名のっているわけ無いだろ!!
0028デフォルトの名無しさんNGNG
JavaScriptって名前にしたのはマーケティング上の理由かららしいよ
0029デフォルトの名無しさんNGNG
>>28
それを真似てC#はCという文字を入れているわけか。
0030デフォルトの名無しさんNGNG
>>27みたいな無知な奴が本屋をやると、
二つの参考書は混同する。
0031デフォルトの名無しさんNGNG
何も言わずにLiveScriptって名前に戻してくれ
0032デフォルトの名無しさんNGNG
JavaScriptだろうがLiveScriptだろうが
Javaはそれよりも劣るわけで。
0033デフォルトの名無しさんNGNG
Javaはどーでもいーけど、信者がウザッ
0034デフォルトの名無しさんNGNG
>>33
乏しい知識をJava使いに突っ込まれて
痛い目にでも遭ったんですか?w
0035デフォルトの名無しさんNGNG
Java信者ハッケソw
0036デフォルトの名無しさんNGNG
Macといい、Javaといい、マイノリティってやつはどうしてこう(ry
0037デフォルトの名無しさんNGNG
>>34は乏しい知識をJavaScript使いに
突っ込まれて痛い目にあったようだね。
0038デフォルトの名無しさんNGNG
>>36
天才なんだ。ですね?
0039デフォルトの名無しさんNGNG
プ
0040デフォルトの名無しさんNGNG
>>30
いや、実際混ぜて置いてある書店多いよ

>>29
C++
++
0041デフォルトの名無しさんNGNG
>>34は乏しい知識をMac使いに
突っ込まれて痛い目にあったようだね。
0042デフォルトの名無しさんNGNG
まー、生業にしないのなら
CとかJavaとか必要ないでしょ

必要だ!と言う人がいたら
その人に聞きたいね、
あんた、いったい何を作るのかと

004322NGNG
>>24
ツッコミングありがとう。
てか,後ろで setter が走るようなプロパティじゃなくて
ただの変数に代入する操作でも,アトミックに実行できるとは限らないって事すか?
# 必殺,スレ違いsage
0044デフォルトの名無しさんNGNG
>>43
そうだよ。スレッドコンテキストはワード単位で切り替わる。
long 値の上位 32 ビットだけ代入された状態でスレッドが切り替わるかも知れない。
参照型の代入もしかり。

ていうかアトミック性の保障は synchronized だけで、その他の命令では保障なし
という仕様だったと思うが実際のインプリはどうなっとるのか知らん。

… これ SMP の話だったかな?
0045デフォルトの名無しさんNGNG
>>44 超絶技巧レスポンスありがとう。
勉強になりますた (´人`) スタ
0046デフォルトの名無しさんNGNG
>>44
volatile修飾子付のインスタンス変数への操作は、保証されているん
じゃなかったっけ?
操作の中間でのコンテキストスイッチを許さないうえに、スレッド単位
でのJVMメインヒープに対するキャッシュを所有することも許さないと
いう修飾子。
単純な変数へのset操作が競合するかもしれないなら、volatileでオッ
ケっすよ。
0047デフォルトの名無しさんNGNG
全部にvolatileをつけろってか?
変な使い方をするなよ。
0048デフォルトの名無しさんNGNG
Javaの限界が垣間見えますた
0049デフォルトの名無しさんNGNG
>>4
> 確かに OO で設計してると property ほしくなるよなー。
> getter/setter にプロパティ変更通知付けたりするとすごい勢いで
> 行数増えちまう。まぁ作るだけなら Excel とかで出力ツールでも
> 作れば良いんだけど、コードの可視性悪いし javadoc も読みづらい。
> かといって HashMap 化するのも馬鹿げてるし。


>>4はオブジェクト指向の真意を理解していないと見た。
C#かVBでVS.NETでマウスでGUI部品を馬鹿みたいに追加しすぎて
ソースコード内にひとつのクラス内にプロパティ使いすぎて数百もの
プロパティに怯んで愚痴っている模様。

>>4はもっとオブジェクト指向を勉強してから発言すべき。
0050デフォルトの名無しさんNGNG
>>26
> だいたいJavaScriptなんて名乗るな
> Javaと無関係だろ!

ECMAScriptと名乗ればよし。
ECMAで標準化されているから
0051デフォルトの名無しさんNGNG
C#にプロパティは反って糞な仕様にみえるとは思わないか?

X x = new X();
x.a = 1;

ときたら

Xのソースは
class C {
 public int a;
//省略
}

となっていると勘違いしそうで不便なのだが。
素人にソースコード書かせるとこの区別がつかなくなりウザイのだが。

一見便利そうで便利でない、応用範囲が限定された糞仕様だわこいつは。



ということで>>1はドキュソ確定。
0052デフォルトの名無しさんNGNG
>>51
勘違いするまでもなく、aはプロパティにしておくのが基本なのれす。
0053デフォルトの名無しさんNGNG
>>52==そうなってない標準クラスのソースを見たことがない奴。
0054デフォルトの名無しさんNGNG
>>49 = 業務開発経験のない学生
0055デフォルトの名無しさんNGNG
>>51
所詮あんたの低い基準での話なんだよね。
オーバーロードとかアスペクト指向とか
見た目でコードが一つだと勘違いして使いこなせそうだな。

C++では::と->と.がJavaでは全部.なのだがそれも.がきたら
class C {
 public int a;
//省略
}
となっていると勘違いしそうで不便だとか言っているだろ。
0056デフォルトの名無しさんNGNG
素人に書かせたら言語によらず糞コードが出来上がるだろ
0057山崎 渉NGNG
(^^)
0058超初心者NGNG
ゲッター、セッターてなんですか?
アクセサメソッドとどう違うのですか?
0059デフォルトの名無しさんNGNG
age
0060デフォルトの名無しさんNGNG
ゲッターロボ
0061_NGNG
http://homepage.mac.com/hiroyuki44/hankaku02.html
0062_NGNG
http://homepage.mac.com/hiroyuki44/
0063デフォルトの名無しさんNGNG
なんか、VB(Delもそうだけど)のプロパティが
publicなインスタンス変数に直接アクセスすることの様に、
書いているが、全く勘違いもいいとこ。

きちんと、プロパティメソッドというのがあり、
それを2種類(Javaのsetter,getterに相当する)
定義するように(読みとり専用は1種類)なっている。
0064デフォルトの名無しさんNGNG
>>60
ありがとうございます。ゲッターは分かりました。
あと、セッターが分からない・・・(泣)
0065デフォルトの名無しさんNGNG
>>64
おらよ。
ttp://www10.ocn.ne.jp/~tabuttie/page010.html
0066JT・ロシュ買っとけNGNG
ゲッタァァァァァ!!トマホゥゥゥゥゥゥゥク!!
0067デフォルトの名無しさんNGNG
ttp://www.amazon.co.jp/exec/obidos/ASIN/4104590010/qid%3D1053612655/sr%3D1-4/ref%3Dsr%5F1%5F2%5F4/249-7145535-9617954
0068デフォルトの名無しさんNGNG
この場合頭脳はストラテジィと訳すべきだと考える。
0069デフォルトの名無しさんNGNG
>>54
>>54==>>4はC#が業務開発専用と思い込んでいる高校生。
0070デフォルトの名無しさんNGNG
Delphi>>>>>>>>>>>>>>>>>>>>>javascript>>java>=その他
0071デフォルトの名無しさんNGNG
>>69
と思い込んでるわけですね :-P
0072デフォルトの名無しさんNGNG
>68
超訳にツッコミを入れても。。。
0073デフォルトの名無しさんNGNG
Del厨が一番悲惨な存在だしなw
0074デフォルトの名無しさんNGNG
C#のプロパティ
一見便利そうに見えても、思わぬ不便な落とし穴にはまることがあったりする。

たとえばNameというプロパティを定義すると
Get_Name, Set_Nameというメソッドを作ることができない。
作るとエラーになる。

あるいは、set/getキーワードを使いたくない場合は、
メソッド名の頭にGet_, Set_を使わなければならない。
その辺りの制限はJavaのsetter/getterメソッドの命名規則と変わらない。

この程度ならまあどうでもいいかもしれない。
しかし、これはどうだろう。

C#で不変クラスを作りたいとき、お前らはどうする?
わざわざプロパティを使うか?

C#のプロパティを不用意に使うと、一部のプロパティ変数を
不変にすることがJava程容易ではなくなるのだ。

Javaでは不変にするためにsetterメソッドを定義しない、フィールドをprivate,
クラスをfinalにするだけで済む。

C#でも、プロパティの使用をやめ、
Javaと同じように(C#ではGet_/Set_で命名)扱えば済む。
0075デフォルトの名無しさんNGNG
C#マンセーな信者の中にはJavaのget/set命名規則を気に入らないものとして
わざわざプロパティを使いたがる者がいるようだが、
プロパティを使ったクラスを不変にするためにJavaよりも面倒なことをしなければならない。
C#は、クラスにプロパティを定義するとそのクラスはデフォルトで可変クラスに
なってしまうという欠点を持っているのだ。
ある方法を使ってsetterの使用を禁止しないといけないのだ。

この事実を初めて知ったときは、C#とはなんて中途半端な仕様なのだと思ってしまった。
C#はなんともオブジェクト指向らしさを欠いている。
0076デフォルトの名無しさんNGNG
>>74
ひどすぎC#






じゃなくてあんたの理解が。
0077デフォルトの名無しさんNGNG
つまりDelphiが素晴らしいと?
0078デフォルトの名無しさんNGNG
>>74
> たとえばNameというプロパティを定義すると
> Get_Name, Set_Nameというメソッドを作ることができない。
> 作るとエラーになる。

IL的にはGet_Name, Set_Nameなのでプロパティをサポートしない言語のために、
そしてECMA標準に従って1.1でエラーになるように修正された。

> あるいは、set/getキーワードを使いたくない場合は、

使いたくない場合ってなんじゃそりゃ?

後半はデタラメすぎて略。
0079デフォルトの名無しさんNGNG
>>78
不変クラスというものをご存知かね?
0080デフォルトの名無しさんNGNG
get だけで set がないプロパティは作れるだろ?
0081山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
■ このスレッドは過去ログ倉庫に格納されています