何时使用声明式编程而不是命令式编程

When to use declarative programming over imperative programming

据我所知,声明式编程和命令式编程之间的主要区别在于,在声明式编程中,您更愿意指定问题是什么,而在命令式编程中,您确切地说明了如何解决问题。

然而,我并不完全清楚何时使用一个而不是另一个。想象一下,你被迫解决某个问题,根据哪些属性你决定以声明方式(即使用序言)或命令式(即使用 Java)解决这个问题?对于哪种问题,您更喜欢使用其中一种?

命令式编程更接近实际机器执行的内容。这是一种相当低级的编程形式,您的应用程序越复杂,您就越难掌握如此低级的所有细节。从好的方面来说,靠近机器,如果你擅长的话,你可以写出相当高性能的代码。

声明式编程更抽象、层次更高:使用相对较少的代码,您可以以更容易被视为正确的方式表达相当复杂的关系。

要了解一个重要的区别,请将纯 Prolog 与 Java 进行比较:假设我去掉了 Prolog 程序中的一条规则。我知道先验这可以使程序至多更具体: 一些以前持有的东西现在可能不再持有了。

另一方面,假设我在 Java 程序中删除了一个语句:一般情况下没有什么可以说的。该程序甚至可能无法编译。

因此,命令式程序中的更改可能会产生非常无法预料的效果,并且极难推理,因为几乎没有保证和不变性,而且很多事情都隐含在程序的某些全局状态中。这使得命令式编程非常error-prone.