一応解説すると、例えば public virtual readonly int Hoge; public HogeClass(int hoge) { this.Hoge = hoge; } と書いただけで private readonly int __hoge; public virtual int Hoge { get { return _hoge; } } public HogeClass(int hoge) { this.__hoge = hoge; } このような感じに自動的に解釈してくれるとうれしいな、って思ったんです。
言語というよりはAPIの特徴か (スコア:2)
Java の getうんたらsetうんたらは、一体なんなのであろうか。無意味なコードがただ増えるだけだ。たぶん、アクセサメソッドには、重要な価値があると信じられた時代があったのだろうが、しかし、今となっては、くだらない役立たずなのは明らか。じっさい、今出てきてる新しいプログラミング言語には、そのようなものは無い。
べつに Java で public インスタンス変数使ってコード書いても、コンパイルエラーが出るわけじゃなし。かまやしないのだが、API がそうなってないから、自分のコードだけそうするってのも少し格好わるい。
Re:言語というよりはAPIの特徴か (スコア:2)
JavaというかC#だけど、フィールドを宣言するだけで、それがアクセサの糖衣構文になればいいのに、とは何度も思った。
Re: (スコア:0)
public int Hoge {get;set;}
たったこれだけ書くのすら面倒なら、プログラマ辞めた方がいいんじゃない?
Re:言語というよりはAPIの特徴か (スコア:2)
一応解説すると、例えば
public virtual readonly int Hoge;
public HogeClass(int hoge) { this.Hoge = hoge; }
と書いただけで
private readonly int __hoge;
public virtual int Hoge { get { return _hoge; } }
public HogeClass(int hoge) { this.__hoge = hoge; }
このような感じに自動的に解釈してくれるとうれしいな、って思ったんです。
// 他にもsetterされたらイベント発火するだけでも自動プロパティ使えなくなる上に
// 自前でフィールド作らなきゃいけないのも、なんとかなればいいなあと
Re: (スコア:0)
省略案があまりよくないとは思うが。
にたような要望はいろいろあるようで。
C#6.0で、
public class Fuga
{
private readonly int hoge;
public int Hoge
{
get{ return hoge;}
}
public Fuga(int hoge)
{
this.hoge = hoge;
}
}
Re: (スコア:0)
Rubyの場合はattr_系の宣言 (実体はメソッドなんですが見た目宣言に見えます) でやります。
class Fuga
attr_accessor :hoge
end
は以下と同等のコードを書いたことになります (@はインスタンス変数 (メンバー変数) につけるprefixです)。
class Fuga
def hoge
return @hoge
end
def hoge=(x)
@hoge = x
end
end
「hoge=(x)」というは「hoge=」というメソッドです。
Rubyの場合メソッドを呼ぶとき引数には原則「()」は要求されませんか
Re: (スコア:0)
プロトタイプベースなら最初からこんなことに悩む必要ないのに……
Re: (スコア:0)
自分としては悩んではいないのですが、
何を悩んでいるとお考えですか?
そしてプロトタイプベースだとその悩みはどう解消されるのでしょうか?
興味があるのでよろしかったら詳しくお願いできますか。
Re: (スコア:0)
"あなたが"悩んでると言ってるわけじゃないよ。
最初から全てがオブジェクト(連想配列)ならそもそもこういったことが挙げられることもないと言っただけ。