命令式编程 vs 声明式编程。你的敌人不是面向对象编程。
本文最初发表于blog.vaibhavgharge.com
很多人抱怨面向对象编程(OOP)做得很差。确实,很多事情做得不好,但我们的敌人不是面向对象编程。
真正的对话不是面向对象和函数式之间的区别,而是命令式与声明式编程风格的区别。
作为主流程序员,我们长期以来一直采用命令式编程,当然,世界正在朝着声明式编程风格发展。
所以真正的问题是命令式编程还是声明式编程以及我们应该选择哪一种?
让我们来探索一下,
- 它们有何不同。
- 代码示例。
- 临别感想。
但是这两个范式之间有什么区别呢?
命令式编程风格是指你告诉别人要做什么,但你也必须花时间和精力去告诉别人怎么做。所以,你不仅要知道做什么,还要知道怎么做。先做这个,然后做那个。
让我们看一个例子
这里有一个小程序。我有一个名单,但我想知道我们的好朋友尼莫是否在名单上。
那么我如何知道 Nemo 是否在这个列表中?
- 我要做的第一步是定义一个布尔值,found 等于 false,当然如果我们找到了我想要输出的 Nemo found。
- 否则,我要说的是,尼莫没有被找到。
List<String> names = List.of("Gill", "Dorry", "Bruce", "Nemo", "Darla");
boolean found = false;
for (String name : names) {
if (name.equals("Nemo")) {
found = true;
break;
}
}
if (found) {
System.out.println("Nemo Found. :-)");
} else {
System.out.println("Nemo Not Found. :-(");
}
当我运行代码时,它显示“Nemo Found. :-)”。
这是命令式代码风格的一个例子,因为我们不仅明确说明要做什么,而且还明确说明如何做。
现在让我们看一下代码,这是声明式编程风格的一个例子。
声明式风格指的是我们只告诉别人做什么,而不是怎么做。它是在命令式系统之上的抽象,它为异步和事件驱动编程开辟了全新的可能性,而无需思考其工作原理。
List<String> names = List.of("Gill", "Dorry", "Bruce", "Nemo", "Darla");
if (names.contains("Nemo")) {
System.out.println("Nemo Found. :-)");
} else {
System.out.println("Nemo Not Found. :-(");
}
临别感想
-
事实上,当所有东西进入操作系统和硬件时,最终都会变成命令式的,这一点需要记住和理解,因为它可以帮助我们形成声明式编程所解决的问题以及它最终如何执行的心理模型——没有什么魔法。
-
命令式风格易于编写,但难以阅读。
-
另一方面,声明式风格易于阅读但难以编写(在一定程度上由于不熟悉)。
-
程序应该是命令式的还是函数式的?我要说的是,对我来说,答案是两者都不是,有时候代码必须是命令式的,有时候代码必须是函数式的,我认为说它必须完全是其中之一而不是另一个是非常天真的。
希望这篇文章对你有帮助。请在评论区分享你的想法。
我很乐意和你聊聊!如果你喜欢这篇文章,请分享、评论。😊 干杯!
鏂囩珷鏉簮锛�https://dev.to/vaibsgharge/imperative-vs-declarative-programming-your-enemy-is-not-object-ientated-programming-52fe