Scalaのようなプログラミング言語の不変性( "var"を避ける)に重点を置いて、オブジェクトの "状態変更メソッド"はインスタンスのコピーを返さなければならないことを意味します。新しい状態)?不変性を持つ設計(Scala)
タートルを考えてみましょう。私はこのように私のカメを移動したいと思います:
val turtle = new Turtle(0, 0, "north")
val turtle2 = turtle.turnLeft().forward(5).turnRight().backward(2)
ここで(彼らは二つの別々のインスタンスです)タートルの同じインスタンスを指していますturtle2。実際には、その一連の動きで、4つの暫定オブジェクトが作成されました。これは、たとえばturnLeftメソッドを実装する方法です。
def turnLeft {
self.copy(orientation = self.orientation match {
case "north" => "west"
case "east" => "north"
case "south" => "east"
case "west" => "south"
})
}
これは正しい設計アプローチですか?
「はい」の場合、(すべてのメソッド呼び出しで新しいオブジェクトを作成すると)効率的/非効率的です。 いいえ、正しいものは何ですか?不変性の側面(あるいは多分関数型プログラミング)に対する私の理解に間違っている/欠けているのは何ですか?事前に
おかげで、短命オブジェクトのとてもたくさんの ラカ
あなたのコードは(不変のPOVから)正しいように思えます。効率の面では、私はそれが確かに単一の変更可能な事前割り当てオブジェクトほど高速ではないと思う。全体の影響は、いかに速く頻繁にカメを移動したいかによって異なります。 –
ありがとう、それに注意してください。 –