状态编程的优势是什么?

34 浏览
0 Comments

状态编程的优势是什么?

我对无状态编程的好处产生了疑问,并找到了一个和我有同样问题的人:无状态编程的优势?然而,当我阅读了回答后,我开始对相反的问题产生了好奇。有状态编程有哪些优势呢?最近似乎很多人关注无状态代码,但我对潮流持谨慎态度。看起来有状态(即命令式)编程可能在某些情况下比无状态(即函数式)编程更适合,并且我希望能更好地识别哪些问题可以通过有状态编程来解决。

0
0 Comments

优点1:状态是重要的。每个位都有状态,状态定义了系统的行为方式,状态使系统具有动态性和可用性。

优点2:将状态明确化。状态不应该散落在代码中,使得难以知道系统的状态以及系统的哪一部分负责处理哪一部分状态。

解决方法:将状态控制在模块内部,确保每个模块只处理系统的一部分状态。

在任何现实世界的函数式编程程序中,总会有两个部分:一个是无状态的,用于核心算法等;另一个是用于维护程序状态的部分。

0
0 Comments

在这段对话中,某些情况下了状态编程的优势,并讨论了为什么状态编程比函数式编程更受欢迎。原因是,人们更容易理解和接受状态的概念,因为状态是世界运作的基础。而面向对象编程和过程式编程更容易上手,因为它们是新手程序员的最佳选择。此外,OOP语言已经非常流行,有更多的教程、工具、IDE等资源可供使用。

然而,这并不意味着流行就等同于概念简单。有人指出,对于一些语言来说,良好的OOP实现确实非常好用。但他的观点是,人们思考的方式是基于状态的。因为世界本身就是一个有限状态机。

然而,也有人持不同观点,认为“状态是世界运作的方式”是一种高度推测性的哲学假设。他们可以反驳说“数学和量子力学才是世界运作的方式(在某些情况下似乎存在状态)”。

状态编程之所以受欢迎,是因为人们更容易理解和接受状态的概念。然而,这并不意味着状态编程就是最简单的概念。不同的观点认为世界运作的方式可能是基于数学和量子力学,或者是其他的方式。因此,我们可以看到,状态编程的优势在于它更符合人们的直觉和思维方式,但并不一定是最简单或最适合所有情况的解决方法。

0
0 Comments

有几种情况下,基于可变的共享状态的编程模型相比于不可变的无状态编程模型有着无可争议的优势。其中一个能够带来巨大优势的领域是允许算法就地操作。Haskell维基上有一个很好的示例,介绍了如何实现快速排序:[http://www.haskell.org/haskellwiki/Introduction#When_C_is_better](http://www.haskell.org/haskellwiki/Introduction#When_C_is_better)。总结起来,当禁止对列表内存进行修改时,需要创建一个已排序的副本。对于几乎任何修改某些数据结构的算法,如AVL树,都是如此。

总体而言,函数式编程语言通常比命令式编程语言更占用内存。如今内存价格便宜,然而带宽至关重要,并且内存速度的增长并不与CPU性能的增长成比例。然而需要注意的是,Haskell的执行模型允许编译器执行一些巧妙的优化,包括内存使用和访问模式方面的优化。在一定程度上,这可以弥补理论上的缺点。

0