我一直在比较Scala over Java在并发编程方面的优势。
显然,我提出的第一点是 Scala是一种功能性编程语言(部分)使用FP自然避免副作用
与命令式语言相比,函数式编程中如何避免副作用以及它如何在多线程/并发编程中起作用?
答案 0 :(得分:5)
我认为,该声明的含义是,Scala作为一种功能性OO 混合语言鼓励(有时会使您)使用功能性构造和规则导致无副作用。你可以很好地编写带有副作用的非功能状态Scala代码;-)另一方面,你可以尝试编写函数式Java(例如),但由于函数不是第一类对象,它可能看起来很难看。所以我不会说它自然会如此,但更多的是在某些方面帮助你,并总体上鼓励你这样做。
在进行函数式编程时,你应该坚持使用几个原则,结果不会产生任何副作用:
实际上,通过遵循上述规则避免副作用的最大好处之一是更容易并发编程!毕竟,并发编程的最大障碍是管理共享状态!
由于其中一条规则是可变和共享状态不好,所以不要使用它!相反,许多函数式语言(如Erlang或Scala)更喜欢所谓的Actor模型,其中Actors(可以与线程进行比较)只通过相互发送消息进行通信(参见?传递值而不是将它们存储在某个地方!)。 p>