我经常发现自己在 if-else 链的所有分支的末尾重复一些代码:
例子:
if (cond1) {
// [...] code 1
// repeated code
} else if (cond2) {
// [...] code 2
// repeated code
} else if (cond3) {
// [...] code 3
// repeated code
}
Run Code Online (Sandbox Code Playgroud)
遵循DRY 原则的最佳方法是什么?
我想到了以下几点:
finally我希望可以在 if-else 链之后使用一个类似于异常的关键字。仅当前面的条件之一为真时,它才会执行代码:if (cond1) {
// [...] code 1
} else if (cond2) {
// [...] code 2
} else if (cond3) {
// [...] code 3
} wrapup {
// repeated code
}
Run Code Online (Sandbox Code Playgroud)
您如何在代码中解决这个问题?
注意:这个问题被标记为该C语言,但我也有兴趣看到其他编程语言的解决方案,这些语言可能对这种程序流/路径有一个很好的构造。
设置一个标志
if (cond1) {
// [...] code 1
// repeated code
} else if (cond2) {
// [...] code 2
// repeated code
} else if (cond3) {
// [...] code 3
// repeated code
}
Run Code Online (Sandbox Code Playgroud)
-->
repeat = true;
if (cond1) {
// [...] code 1
} else if (cond2) {
// [...] code 2
} else if (cond3) {
// [...] code 3
} else {
repeat = false;
}
if (repeat) {
// repeated code
}
Run Code Online (Sandbox Code Playgroud)
// Start block in which we expect to do wrap-up code except in unmatched case.
do
{
if (Condition0)
{
Code0;
}
else if (Condition1)
{
Code1;
}
else if (Condition2)
{
Code2;
}
else
break;
// Perform the wrap-up code in all cases except the above else-break.
WrapUpCode;
} while (0);
Run Code Online (Sandbox Code Playgroud)