Cok*_*aka 5 functional-programming scala immutability
由于强调Scala等编程语言的不变性(避免使用"var"),我的对象中的"状态修改方法"是否必须返回实例的副本(具有新状态)?
我们来考虑龟.我想像这样移动我的乌龟:
val turtle = new Turtle(0, 0, "north")
val turtle2 = turtle.turnLeft().forward(5).turnRight().backward(2)
Run Code Online (Sandbox Code Playgroud)
这里turtle2不会指向同一个Turtle实例(它们是两个独立的实例).事实上,在这一系列运动中,创造了4个临时物体.这就是我实现方法turnLeft的方法,例如:
def turnLeft {
self.copy(orientation = self.orientation match {
case "north" => "west"
case "east" => "north"
case "south" => "east"
case "west" => "south"
})
}
Run Code Online (Sandbox Code Playgroud)
这是一种正确的设计方法吗?
如果是,那么(在每个方法调用上创建新对象)效率/效率如何?如果不是,那么什么是正确的?我对不变性方面(或者一般的函数式编程)的理解有什么不对/缺失?
提前谢谢,拉卡
创建大量短暂的物体是scala的标志性特征.它通常不是很昂贵,只要你在具有足够大小的堆的JVM上运行它,具有足够的年轻代内存以容纳所有的流失.
话虽如此,不变性不是宗教.常识应占上风,并指导设计决策,坚持"范式"变得过于沉重.