><https://twitter.com/orange_in_spacehttps://pawoo.net/@orange_in_space
Dictionary をストレージとする getter はあります。例えば JSON を辞書に変換したものをバックに持ち、それが持っているであろうフィールドをメソッドとして提供するなどが考えられます。裏側を動的なデータ構造にしつつ、メソッドとして提供することはあるかと
x平均tじゃなくo平均じゃなく
C# の文脈だとpublic string this[string key] { return this.dict[key];}が存在するので別名を付けたくないモチベーションはある
表記ゆれが><;
平均tじゃなく最大値、最小値だってそうだよね><「そういうの一切プロパティにするな」ってそれプロパティ畑(?)の人っぽくない><(プロパティー畑(?)であるDelphiが好きな人です><)
例えば平均値を返すプロパティは存在していいのかみたいな話・・・?><(「呼ばれてから平均を調べる可能性があるならプロパティにして欲しくない」みたいな話かも?><)
そういう話じゃなく、実際の処理が重いかどうか、場合によっては予め返すものを用意してるか否かがみたいなのが不安なのが問題って話じゃないの・・・?><
さっきも書いたけどそういうのは lookup とかそういう別名がちゃんと付けられるはずで,基本的に setter/getter ってただのフィールドアクセスだと思ってたのだけれども
それ getter ではなくない
100倍遅いのはデータ構造が悪いけど、でも getter の中身がフィールドアクセスとは限らない、例えば Dictionary のルックアップなこともあるでしょ?
メソッドでも軽いか重いかわかんないけどメソッドは重い覚悟をする(?)みたいな感じ?><; プロパティも同様に考えればよくない・・・?><
プロパティだと中味の処理が軽いか重いか、何らかの結果をキャッシュしたりしてるかしてないか、そういうのが不安というか、「プロパティの方が軽いことを期待しちゃう」みたいな意味かも・・・?><
代入式が使えるプロパティより、 GetHoge, SetHoge メソッドの形式を推すのは、どちらにしてもメソッド呼び出しだからです。メソッドの契約は名前だけ(言い過ぎ)であって、内部の実装はなんでもいい、例えば通常の変数へのアクセスより、その getter のほうが 100 倍遅い可能性だってあるわけで、それをばんばか使われるわけには行かない。そういう意味で、メソッド形式であるべきで、呼び出した結果は、呼び出し元がしばらく持っておけと思うわけです。
GetHoge, SetHoge 方式だと、プロパティ方式よりもコンパイラがバグを見つけにくいかも?><
プロパティ自体はあんまり好きじゃなくて、 GetHoge, SetHoge のほうが好きなんですけどね。メソッド呼び出し感があるので。それはそれとして自動実装プロパティは、 public メンバーとしてあるべき契約のあり方(つまり getter, setter。値を記録するストレージを隠蔽する)でフィールドを公開できるという点でうまい
getter, setter が必要か、わからないから必要なのであって、そういう意味で自動実装プロパティというのは正解
たとえば*foo(a, b) += 1;のような式は += がないと一時変数を用意することになってしまうので、そこはさすがに
AdaもPascalと同じく++とか+=とか無いっぽい><
++どころか+=すらないPascalさんが・・・><(Delphiの場合はInc()でインクリメント>< http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/delphivclwin32/[email protected] )
たとえば Rust でも ++ 演算子がなくて += 1 を使えみたいなデザインだったり、条件演算子がなくて if の値を使えという感じだったりして、あまり本質的でない拡張を言語機能から除外するというのはアリなのかなと最近は思っている
思考の /dev/null