1.一个故事:需要指定详细的操作内容
小明公司要举行一次春游活动,他们老大(主管)告诉小明春游活动的地点范围是公司所在市的5A景区,时间是这个双休日,有25个人。需要定公司的1辆30人的大巴车,在公司集合,出发时间是早上七点半。希望十点能到达景区。之后小明按照老大的吩咐很好的完成了任务。大家玩的也很开森。愉快的春游就这样结束了。
这个故事说明了命令式编程的思想,会告诉程序很具体的操作,一步一步的执行下去,他们老大使用的就是命令式编程。这里的流程中出现一个问题(大巴司机时间,景区不开放等问题)就会退出, 因为没有异常处理。
但是一般的情况下,老大是很忙的,不会告诉你很多的细节或者步骤,需要你自己去完成。只会告诉你这个周末去春游,人数25人,小明你组织一下。
这就是声明式的编程风格, 老大不会说具体怎么做 (How), 只会描述要干什么事儿(What) , 剩下的具体步骤需要小明去完成。
像sql,java8,react等语言都实现了声明式编程的语法,sql只声明我们要什么,不告诉你怎么做,这些都交给sql数据库管理工具去完成了。数据库管理工具用命令式的编程方式拿到我们要的结果。
声明性是函数式编程的一个重要特点, 函数式还有其他特点, 像高阶函数、函数没有side effect, 只有值而没有变量, 用递归而不是用迭代等等。 想要完全的掌握函数式需要你彻底的刷新思维, 甚至忘掉命令式的习惯, 所以学习曲线比较陡峭。
但是这并不妨碍“声明性”这个特点在某些特定领域的应用, 因为它的确能极大的简化代码, 除了上面提到的SQL和Java8 的例子, 在很多领域特定语言里边, 我们的目标就是试图把一个问题尽可能的抽象, 创造一个简单的“小语言”以声明性的方式来描述问题, 不但能简化程序员的工作, 甚至一些业务人员都可以使用了。