Mit dem Schwerpunkt auf Unveränderlichkeit in Programmiersprache wie Scala (vermeiden Sie "var"), bedeutet es "state-modifying Methoden" in meinem Objekt muss eine Kopie der Instanz (mit der neue Staat)?Entwerfen mit Unveränderlichkeit (in Scala)
Betrachten wir Schildkröte. Ich möchte meine Schildkröte wie diese bewegen:
val turtle = new Turtle(0, 0, "north")
val turtle2 = turtle.turnLeft().forward(5).turnRight().backward(2)
Hier würde Turtle2 nicht auf der gleichen Instanz von Turtle zeigen (sie sind zwei getrennte Instanzen). Tatsächlich wurden in dieser Bewegungssequenz 4 vorläufige Objekte erzeugt. Dies ist, wie ich würde die Methode implementieren turnleft, zum Beispiel:
def turnLeft {
self.copy(orientation = self.orientation match {
case "north" => "west"
case "east" => "north"
case "south" => "east"
case "west" => "south"
})
}
Ist die ein richtiger Design-Ansatz?
Wenn ja, wie effizient/ineffizient ist das (Erstellen eines neuen Objekts bei jedem Methodenaufruf)? Wenn nein, was wäre der richtige? Was ist falsch/fehlt in meinem Verständnis von Unveränderlichkeit Aspekt (oder vielleicht funktionale Programmierung im Allgemeinen)?
Vielen Dank im Voraus, Raka
Ich denke, dass Ihr Code korrekt aussieht (aus einem unveränderlichen POV). In puncto Effizienz denke ich wird es sicherlich nicht so schnell wie ein einzelnes veränderbares vorbelegtes Objekt sein. Die Gesamtwirkung hängt davon ab, wie schnell und häufig Sie die Schildkröte bewegen möchten. –
Danke, werde das beachten. –