Scala不可变vs可变.一个人应该去的方式是什么?

smo*_*oes 5 oop functional-programming coding-style scala

我只是学习scala编程.我在函数式编程方面有一些经验,就像面向对象编程一样.我的问题很简单但很棘手:

Scala应该使用哪些结构?我们应该只坚持不变量,例如.通过迭代修改列表并将新的列表粘在一起,或者去寻找可变的列表?您对此有何看法,性能方面,内存相关方面,......

我可能会以功能性的方式进行编程,但它通常会扩展到通过使用mutable轻松完成的事情.是依赖于情况,使用什么?

Pét*_*rök 3

(我认为这一定是重复的,但很难找到更早的类似的,所以我冒昧地回答......)

这个问题没有通用的答案。Scala 的创建者建议的经验法则是从不可变的 val 和结构开始,只要有意义就坚持使用它们。通过这种方式,您几乎总是可以为您的问题创建一个可行的解决方案。但如果没有,当然要务实并使用可变性。

一旦有了解决方案,您就可以对其进行调整、测试、测量其性能等。如果您发现它太慢或过于复杂,请识别其中的关键部分,了解导致问题的原因,并在需要时重新实现它使用可变变量,理想情况下使其与程序的其余部分隔离。请注意,在许多情况下,也可以从不可变领域内找到更好的解决方案,因此请先尝试在那里查找。特别是对于像我这样的初学者来说,仍然经常发生这样的情况:我能想出的最佳解决方案看起来扭曲且复杂,并且没有明显的方法来改进它 - 直到在几行代码中看到针对同一问题的简单而优雅的解决方案,由经验丰富的 Scala 开发人员创建,他控制着该语言及其库的更多功能。