アカウント名:
パスワード:
Java の getうんたらsetうんたらは、一体なんなのであろうか。無意味なコードがただ増えるだけだ。たぶん、アクセサメソッドには、重要な価値があると信じられた時代があったのだろうが、しかし、今となっては、くだらない役立たずなのは明らか。じっさい、今出てきてる新しいプログラミング言語には、そのようなものは無い。
べつに Java で public インスタンス変数使ってコード書いても、コンパイルエラーが出るわけじゃなし。かまやしないのだが、API がそうなってないから、自分のコードだけそうするってのも少し格好わるい。
えっと、それは本気で Java でパブリックフィールドを使わずにアクセサーを使う理由を理解できないと言っているの? 「Java には C# のプロパティーに相当する機能がなくてアクセサーメソッドだらけになるのが古臭い」とか言うならわかるけれど。
アクセサメソッドは要らないでしょう。JavaScript、Go、Haskell、Dart で書かれたコードを見れば明らかなように、アクセスコントロール機構なんて無くても、誰もまったく困らない。
JavaScriptには機能が追加されたようですが。
誰かが困ったんでしょうね。
追加されてはいない。そもそもJavaScriptだとインスタンスとクラスの結びつきがないから、そのクラスでのみ読めるという仕組みがあわない。
Object.definePropertyができましたね。
JavaだってC#だって、そのクラスのみ読めるというようには普通作らないでしょう。そのインスタンスのみ読めるように作ります。
あーアクセサの話ね。setter、getterはそりゃいるよ、で入ったのは結構前。上の話はprivate云々の話のつもりで書いた。
privateはもともと、クロージャでなんとかできたんじゃありませんでしたっけ?
やろうと思えば出来なくもないが、実質できない。各メソッドがその変数を参照しようとすれば、メソッドの外側にクロージャを作らないといけない。でもただそれだけだと全てのインスタンスにおいて共有されてしまう。インスタンス毎に分けたくばコンストラクタ内でクロージャを作らないといけない。となると、コンストラクタ内でメソッドを定義することになる。すると、今度はメソッドを各インスタンスで共有するということができなくなる。これらの問題を無理矢理解決しようとすると、今度はメモリリークになる。唯一の解決策はES6で入るWeakMapを活用すること。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり
言語というよりはAPIの特徴か (スコア:2)
Java の getうんたらsetうんたらは、一体なんなのであろうか。無意味なコードがただ増えるだけだ。たぶん、アクセサメソッドには、重要な価値があると信じられた時代があったのだろうが、しかし、今となっては、くだらない役立たずなのは明らか。じっさい、今出てきてる新しいプログラミング言語には、そのようなものは無い。
べつに Java で public インスタンス変数使ってコード書いても、コンパイルエラーが出るわけじゃなし。かまやしないのだが、API がそうなってないから、自分のコードだけそうするってのも少し格好わるい。
Re: (スコア:3)
えっと、それは本気で Java でパブリックフィールドを使わずにアクセサーを使う理由を理解できないと言っているの? 「Java には C# のプロパティーに相当する機能がなくてアクセサーメソッドだらけになるのが古臭い」とか言うならわかるけれど。
Re: (スコア:2)
アクセサメソッドは要らないでしょう。JavaScript、Go、Haskell、Dart で書かれたコードを見れば明らかなように、アクセスコントロール機構なんて無くても、誰もまったく困らない。
Re: (スコア:0)
JavaScriptには機能が追加されたようですが。
誰かが困ったんでしょうね。
Re: (スコア:0)
追加されてはいない。
そもそもJavaScriptだとインスタンスとクラスの結びつきがないから、そのクラスでのみ読めるという仕組みがあわない。
Re: (スコア:0)
Object.definePropertyができましたね。
JavaだってC#だって、そのクラスのみ読めるというようには普通作らないでしょう。
そのインスタンスのみ読めるように作ります。
Re: (スコア:0)
あーアクセサの話ね。
setter、getterはそりゃいるよ、で入ったのは結構前。
上の話はprivate云々の話のつもりで書いた。
Re: (スコア:0)
privateはもともと、
クロージャでなんとかできたんじゃありませんでしたっけ?
Re:言語というよりはAPIの特徴か (スコア:0)
やろうと思えば出来なくもないが、実質できない。
各メソッドがその変数を参照しようとすれば、メソッドの外側にクロージャを作らないといけない。
でもただそれだけだと全てのインスタンスにおいて共有されてしまう。
インスタンス毎に分けたくばコンストラクタ内でクロージャを作らないといけない。
となると、コンストラクタ内でメソッドを定義することになる。
すると、今度はメソッドを各インスタンスで共有するということができなくなる。
これらの問題を無理矢理解決しようとすると、今度はメモリリークになる。
唯一の解決策はES6で入るWeakMapを活用すること。