><https://twitter.com/orange_in_spacehttps://pawoo.net/@orange_in_space
・・・・・・><気象庁 | 週間天気予報: 埼玉県 https://www.jma.go.jp/jp/week/317.html
インクリメントは、Delphiメインに使ってた時は、Pascal系のなにかの読み物の「インクリメントは正しくない!!! hoge:=hoge+1; の方がいい!」みたいな記述を理由を忘れたまま覚えてて「そうなのかも><(駄目な信者)」って感じだったけど、時が流れ、CIL(MSIL)を弄って遊んでた時には「スタックマシンにこそ高速化の為にインクリメント命令つける方がよくない?><;」になった><(じゃないとループ書く時とかにものすごく処理増える><;) 同じスタックマシンなVMでもJavaVMにはインクリメント命令あるっぽい><
「書き方によって速度が変わる」べきでは無いのであれば、プロパティでもメソッドでもメソッドのなんか名前の付け方がどう(?)でも変わるべきではないんだから、つまり「プロパティは軽くなければならない(?)けどメソッドは重くてもいい」みたいに考えることもおかしくない・・・?><
?><
賢くないからこその戒めであり枷かも><「(メンテめんどくさい;; こんな目先しか考えなてない仕様にするんじゃなかった;; 次に何か作る時はちゃんと作ろう;;)」って><
一理あると思うけど人間はそんなに賢くない
内向きと外への約束ってきっぱり分けて考えていれば自然にそうなるはず><動的型付け環境が「そんなもの好む人が本当にいるなんて信じられない!!!><」って思うのも、「外への約束がそんな曖昧でいいの!?><; ていうか何も約束してないじゃん!?><;」って所かも><
将来を見越してというか、「公開してしまった約束は死ぬまで守れ!!!!!><# 」ってオレンジが普段いろんな話題で言いまくってることそのまんまかも><約束を死ぬまで守るために隠蔽して、あとでなにかあってもエミュレートして互換性を保てるようにする><互換性を保てなくなったら「私は目先のことしか考えていませんでした」って札を下げて土下座して謝る><
後からアクセス制限をかけることが絶対にないと確信・断言できるメンバ変数なら外出ししてもいいと思うけど、ライブラリでそういうのってなかなかないのではと思う
まあ、どこまで将来を見越して設計できるかの勝負みたいなところはあるけど
https://mstdn.maud.io/@orumin/102455097216663974私は15年前に自我がなかったのでよく知らないけど、構文の一貫性とか、後から値のセットで validation を付けたくなった場合などのことを考えると、その可能性のあるものは最初から関数の getter / setter を用意しておくべきだろうという立場
そう,昔 Java で論争されてたときも,validation とかのために,あとカプセル化の観点から setter/getter は全てのメンバに付けるべきでメンバは全て private でやれという話があって,これに対して,絶対 setter/getter を付けるべきとかじゃなくて,フィールド外出しでいいやつは setter/getter つける必要ないし,setter/getter が本当に必要なときにはもうちょっと気の利いた命名できる場合がほとんどでしょ,という反論があって,私は後者の立場だった
Java嫌いな点もう一個あった!><; 符号無し整数型が無い事><
ていうか、プロパティでは無い単なる習慣でしかないgetter setterって、存在意義謎だし、プロパティが無かった事がオレンジがストレスすぎてJavaを本格的には使えなかった2大理由のひとつ><(もうひとつの理由は演算子のオーバーロードが無くてBigIntegerみたいなのが愉快な事になってしまうこと><)
Delphi / C# 方式プロパティが好きな人、呼ばれる側が賢くあってほしいみたいな発想があるのかもしれない><(サンプル数1)
オレンジの場合で、(Delphi / C# での)プロパティが返すものを予め準備するか否かはケースバイケースで、例えば最初に呼ばれた時に用意して、次回からはキャッシュしたやつを返す、再計算が必要な時にも用意したり用意しなかったりするみたいに、呼ばれる側が自動でいい感じにいろいろしたい時は、むしろプロパティじゃなきゃ気持ち悪い><手動でそういうの制御できるようにもしたい時には設定用のプロパティを作ったり、明示的に準備させるメソッドを用意したりする><
オレンジ的には隠蔽するんだから、重いかもしれない可能性も含めて隠蔽される(隠蔽されてしまうけどそういうもの)みたいな考えだった><
そういうのを含めてストレージの隠蔽をするために getter, setter を定義するのでしょう。じゃなかったらフィールド外出しでいい
あれはインデクサ、または引数付きプロパティ
もちろん、その処理自体は O(1) であることが期待されるし、そうでない構造をバックに持つべきではないですが
思考の /dev/null