oop - if-less 编程(基本上没有条件)

标签 oop polymorphism conditional-statements

我有一位同事告诉我,他曾经在一家公司工作,该公司的政策是代码中永远不要有条件语句(“if”和“switch”语句),并且他们让代码中的所有决策可以使用多态性和(我猜)其他一些面向对象原则来完成。

有点理解这背后的原因,即拥有更干燥且更容易更新的代码,但我正在寻找对此概念的更深入的解释。或者它可能是更通用的设计方法的一部分。

如果有人对此有任何资源,或者愿意解释,甚至有更多与此相关的术语,我可以用来找到更多答案,我将非常感激。

我找到了one question on SO这有点相关,但我不熟悉 C++,所以我不太理解那里的答案。

(顺便说一句,我不是面向对象专家,但我可以做到)

我最精通 PHP,其次是 Python,所以我更喜欢使用这些语言的信息。

更新:我会向我的同事询问他的确切含义的更多信息。

2015 年更新:经过多年的编程经验,我现在发现该政策的目的可能是防止程序员通过仅在某些位置添加条件(if 语句)来随意添加功能。扩展软件的更好方法是使用"Open/Closed principle"通过使用继承和多态性来扩展软件。我强烈怀疑该政策是否对所有条件都非常严格,因为很难完全没有它们。

最佳答案

Anti-IF Campaign 上有一些资源网站,例如 this article .

我认为这是一个程度问题。条件并不总是不好,但它们可能(并且经常)被滥用。

其他想法(一天后)

Refactoring: Improving the Design of Existing Code是关于这个主题(以及许多其他主题)的很好的引用。它涵盖Replace Conditional with Polymorphism 。还有一个新的,Replace Conditional with Visitor ,在网站上。

我重视简单性和 single responsibility删除所有 if 语句。这三个目标常常是一致的。支持 cyclomatic complexity 的静态分析工具metric 可以快速指出带有嵌套或串行条件的代码。 if 语句可能会在重构后保留,但可以分解为更小的方法和/或多个类。

更新:Michael Feathers 在 Unconditional Programming 上写了一篇文章.

这是一个热门话题:Phil Haack Death to the IF statement !

关于oop - if-less 编程(基本上没有条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264145/

相关文章:

r - 根据条件 R 匹配和删除行

Php/OOP 如何避免同一个类的实例访问其他对象的私有(private)属性/方法

对象的 Javascript oop 实例

php - 为什么我的 "if"语句总是确定为 TRUE?

java - Java中的高级泛型

c++ - 同名类的构造函数继承

Mysql 多表查询带条件

c# - 防止任何子类覆盖/隐藏方法 c#;为父类(super class)保留方法签名

php - MVC 模式——正确的思考方式

java - 我不明白 'this' 与父类(super class)一起使用