无状态编程的优点?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我最近一直在学习函数式编程(特别是Haskell,但我也经历了关于Lisp和Erlang的教程)。虽然我发现这些概念非常有启发性,但我仍然没有看到“无副作用”概念的实际意义。它的实际优势是什么?我试图用功能思维来思考,但是有些情况看起来过于复杂,没有以简单的方式保存状态的能力(我认为Haskell的monads不容易)。

是否值得继续深入学习Haskell(或另一种纯粹功能的语言)?功能性或无状态编程实际上比程序更高效?以后我是否会继续使用Haskell或其他函数式语言,或者我应该只是为了理解而学习它?

我关心的不是性能而是生产力。所以我主要问的是,在功能性语言中,我是否会比程序/面向对象/其他方面更有成效。

提问于
用户回答回答于

有很多的优势,以无状态编程,而不是其中最重要的是显着的多线程和并行代码。说穿了,可变状态是多线程代码的敌人。如果默认值是不可变的,程序员不需要担心一个线程会改变两个线程之间共享状态的值,所以它消除了与竞争条件有关的整个类的多线程错误。由于没有竞争条件,所以也没有理由使用锁,所以不变性消除了与死锁有关的另一类整体错误。

这就是为什么函数式编程很重要的一个重要原因,并且可能是在功能性编程序列上跳跃的最好的原因。还有很多其他好处,包括简化的调试(即,功能是纯粹的,不会在应用程序的其他部分中改变状态),与代码严重依赖于设计模式的语言相比,更简洁和表达的代码,更少的样板代码,以及编译器可以更积极地优化你的代码。

用户回答回答于

你的程序中有越多的程序是无状态的,将更多的程序放在一起而没有任何中断。无国籍范式的力量本身不在于无国籍(或纯洁),而在于它赋予你编写强大,可重用功能并将它们结合起来的能力。

你会采空区更富有成效,特别是如果你选择的是还具有代数数据类型和模式匹配(CAML,SML,哈斯克尔)函数式语言。

扫码关注云+社区