为什么需要状态?

SpeedVan 13-08-04
         

为什么需要状态呢?我们需要正视这个问题,状态究竟是怎样的一个东西。

把状态放在计算机当中成为了什么?

一台计算机全是01组成的,全是逻辑门电路,那么计算机里应该全是计算,若果成立,那么状态究竟是怎样一种计算?

当我们用变量保存状态时,存不存在悖论?



学了函数式后,很多观点,都开始产生裂缝。反思正是思维成长的证明。

         

2
banq
2013-08-05 06:57

0或1本身表示就是一种状态,是或非的逻辑状态啊。状态=时间+数值,是某个时刻代表的那个值。

建议探讨Statement 和expressions 区别,两者一个区别是前者有副作用,而后者没有。

计算机除了计算功能外,其实还有储存功能,储存为人服务的,信息管理系统, ERP等等基本都是一种数据跟踪系统,现实世界随着时间变化的数据储存起来,比如财务系统,每个月都有一个科目余额,结算到下一个月,随着你企业增长,这些都是表示你企业成立以来赚了多少钱,成本有哪些,等等。

命令式语言其实是一种人机交互命令的系统,属于软件工程派,此派和纯数学算法派是计算机世界两种至今存在的斗法流派,如同伊斯兰和基督教一样。

我个人感觉,很多人扎到纯数学算法派中,可能只有面向函数思维,特别是我们看到世界上一些大型流量网站,如facebook或twitter,其实他们的业务数据结构很简单,甚至是非结构化数据,所以,侧重面向函数的平台概念无疑对于他们是合适的,而大量企业软件实践中,不能忽视复杂业务场景,不能忽视业务领域中结构性特征,以及这些结构在某个时刻的值,也就是状态。

面向函数思维更适合做技术架构,命令式状态的思维更适合做业务架构。

[该贴被banq于2013-08-05 07:12修改过]

SpeedVan
2013-08-05 17:51

2013-08-05 06:57 "@banq "的内容
命令式语言其实是一种人机交互命令的系统,属于软件工程派,此派和纯数学算法派是计算机世界两种至今存在的斗法流派,如同伊斯兰和基督教一样。 ...


过去我也会是这样的观点,但现在我觉得之所以有这观点,是因为函数式没有很好的落地方式。函数式跟算法有很大不同,命令式的算法,仍然有很多局限性,通用性差,一旦在多线程的情况下,甚至会无法应用。而函数式的算法,其实是纯逻辑,过去我们都认为面向对象比起算法更接近自然语言,而现在我反而觉得函数式更接近自然语言。我不推崇算法,因为算法没有坚决抛离状态,而函数式的算法,我更倾向说逻辑,或者就说函数。算法没有逻辑组合,而函数和逻辑有。

用函数特有的方式来模拟指令式,你会发现函数写出来的实际上更可读,首先他不会隐蔽地改变定义,其次没有中间输出,再次它的逻辑组合能力跟自然语言的组合能力相近。
[该贴被SpeedVan于2013-08-05 17:53修改过]

SpeedVan
2013-08-05 18:25

我举个例子
f = {i = g
return (h i)}

f = do i <- g
h i

在指令式的理解下g的返回值给i,然后返回h i
函数式的理解是这是一种函数+函数 = 函数的方法,上面函数式等价:f = g>>= \i -> h i。这式子是说函数f是由函数g与函数\i->h i组合得出。可以看出差别在于,函数式表达的是f等价于各个“指令”的有机组合,而指令则是由最后一个指令来决定返回,要说得明白点就是,改变g,函数式的话,会使整个函数改变,而指令不会。

函数认为“指令= 指令+指令”递归下去有“指令=指令+(指令+(指令+。。。))”,也就是说决定指令的是+号。这跟我们自然语言的使用是一致的,一个句子的逻辑是词语的逻辑组合而成,而不是简单地把词语拼在一起。

banq
2013-08-06 07:14

今天看到一篇文章:Moving Away from State

文中提到,只在两种情况下需要状态:
1.模型对象或代表业务状态的领域对象
2.保留有GUI状态的viewmodels/controllers

我想如果采取REST+DDD架构,可能只需要一个聚合根实体这一个地方有状态即可。

远离了状态,你就相当于远离了goto语句或IF语句。
http://www.jdon.com/artichect/ifelse.htm
[该贴被banq于2013-08-06 07:52修改过]

5Go 1 2 3 4 ... 5 下一页