关于命令式语言和功能性(声明性)编程语言之间的区别,有什么确定的答案,可以通过实际例子来解释吗?什么是主要或最重要的命令式语言?功能语言怎么样?
我确实在这里读到了这个答案,但实际上让我更加困惑...... :-(What is difference between functional and imperative programming languages?
没有重大区别。
我的意思是,现在计算机是你的奴隶(*)(你是一个非常不幸的国王)。这是一个非常愚蠢的,你自己给每个细节的命令。就像,“洗我马厩里的第一匹马”。 (或者甚至“把一桶水带到马厩的第一个摊位。在那里洗马。清理马厩里的第一个摊位。”)然后,“洗我的第二匹马”。 (甚至,“斗......第二档......等等”)。等等。
或者它是一个稍微知识渊博的奴隶,在那里你给他一个稍微更普遍的命令,比如“洗掉我马厩里的所有马匹”。但实际上,你可以这样说给你最初愚蠢的奴隶,他多年来通过写下他需要执行的每个动作的食谱来变得更聪明,所以更一般的食谱可以参考更简单的食谱而不是重新描述每一步。
所以现在确实没有区别。大概在与第二个奴隶交谈时你会遵守某些限制,这使你更容易描述你的下一个请求。你还在做所有的描述。
两者都不像总经理,你可以向他们解释你对如何代表你做事的一般感受,并且他们自己弄清楚细节。
当然,总经理需要很多助手,他们可能会使用许多愚蠢的奴隶。又笨蛋了。
一个聪明的总经理可能会比你自己更了解运行你的帝国。他们甚至可能完全取代你。
上述认为功能不是声明的子集。
编辑:第二个奴隶拒绝理解你的某些事情。你可以告诉第一个,例如:“n是1.把桶水带到第n档。现在是2.在第n档中洗马。现在是n。清理第n档”。这将导致运行时错误。
聪明的奴隶只是不会在那里了解你。他知道第一个稳定不能突然变成第二个;这是第一个,一直都是。这有助于您不要给出愚蠢的订单。这是功能性的 - 知道一些事情没有完成,拒绝遵循愚蠢的命令。根本不可能,完全没有问题。因此,通过命令式编程,责任在你身上,而你一个人;功能范式强加给你的纪律减轻了你的负担。
(*)很抱歉从人类的黑暗历史中唤起这种恶心的范式;即使在今天,在世界某些地方也不会那么遥远。
让我们使用这个简单的代码:a = b + c
来检查差异。
当我们用命令式语言(如C)编写a = b + c
时,我们将b + c
的当前值赋给变量a
,仅此而已。我们没有就a
是什么做出任何基本陈述。相反,我们只是在一个过程中执行一个步骤。
当我们用像Microsoft Excel这样的声明性语言编写a = b + c
时,我们断言a
,b
和c
之间的关系,以便a
总是这两种情况的总和。这不是一个过程中的一步,它是一个不变的,一个保证,一个真实的宣言。
功能语言也是声明性的,但几乎是偶然的。例如,在Haskell中,qazxsw poi也断言了一个不变的关系,但这只是因为b和c是不可变的。