免责声明:我是一名外行,目前正在学习编程。从未参与过项目,也从未编写过超过 ~500 行的内容。
我的问题是:防御性编程是否违反了不要重复自己的原则?假设我对防御性编程的定义是正确的(让调用函数验证输入而不是相反),那不会对您的代码有害吗?
例如,这是不是很糟糕:
int foo(int bar)
{
if (bar != /*condition*/)
{
//code, assert, return, etc.
}
}
int main()
{
int input = 10;
foo(input); //doesn't the extra logic
foo(input); //and potentially extra calls
foo(input); //work against you?
}
与此相比:
int main()
{
if (input == /*condition*/)
{
foo(input);
foo(input);
foo(input);
}
}
同样,作为外行,我不知道就性能而言有多少简单的逻辑语句对您不利,但可以肯定的是,防御性编程对程序或灵魂都不利。
最佳答案
违反 DRY 原则的是这样的:
int foo(int bar)
{
if (bar != /*condition*/)
{
//code, assert, return, etc.
}
}
int main()
{
int input = 10;
if (input == /*condition*/)
{
foo(input);
foo(input);
foo(input);
}
}
如您所见,问题在于我们在程序中进行了两次相同的检查,因此如果条件发生变化,我们必须在两个地方进行修改,而我们很可能会忘记其中一个,从而导致出现奇怪的行为。 DRY 不是指“不要将相同的代码执行两次”,而是“不要将相同的代码写两次”
关于c++ - 防御性编程是否违反了 DRY 原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/961297/