重构(如果不是)
本文关键字:如果不 重构 | 更新日期: 2023-09-27 17:57:01
我正在重构遗留代码。有一个很大的如果别的声明。这是我可以使用的模式吗?我过去曾使用字典进行 if-else,但这有很多 (&&),所以不知道如何重构它。
例如,代码是
public void ChangeControlVisibiltiy()
{
if (name != "I")
{
//Do something
}
if ((name != "A") && (name != "B") && (name != "C") && (name != "D") && (name != "F") && (name != "G") && (name != "H") && (name != "I") && (name != "J") && (name != "H") && (name != "I") && (name != "J"))
{
//Do something
}
if ((name != "A") && (name != "B") && (name != "D") && (name != "F") && (name != "G") && (name != "H") && (name != "I") && (name != "J") && (name != "H") && (name != "I") && (name != "J"))
{
//Do something
}
if ((name != "A"))
{
//Do something
}
if ((name != "A") && (name != "K") && (name != "L") )
{
//Do something
}
if ((name != "A") && (name != "K") && (name != "L") && (name != "B") && (name != "D") && (name != "F") && (name != "G") && (name != "H") && (name != "I") && (name != "J") && (name != "H") && (name != "I"))
{
//Do something
}
if ((name != "A") && (name != "L"))
{
//Do something
}
if (name == "M")
{
//Do something
}
else if (name == "C")
{
//Do something
}
else
{
//Do something
}
}
好吧,
这看起来有点尴尬,但您可以删除 2。 和 3. if 语句。如果只有一个参数要检查,也可以使用 switch 语句。
尽管如此,您应该使用 .equals() 而不是 ==,请给我们一个真正的工作代码示例。一般来说,如果你一遍又一遍地使用相同的代码,使用某种模式,只需将其提取到一个新方法中,例如,如果你经常像Name.equals("A") || Name.equals("B")
这样创建一个像oredEquals(String name, String... matches)
这样的新方法。
请注意,在您的代码中,您有每个条件的操作。如果你有每个动作的条件,它可能看起来更短(但它只是语法糖,你不能利用分支能力来减少动作本身的数量):
controlA.Visibile = someConditionA ? true : false;
controlB.Visibile = someConditionB ? true : false;
controlC.Visibile = someConditionC ? true : false;
在给定的示例中? true : false
部分可以省略,为了清楚起见,我提供了它,表明您可以通过这种方式设置操作参数值。
您仍然必须使用分支(if
/else
)来避免某些操作的发生。
您可以将其重构为多个switch
分支:
public void ChangeControlVisibiltiy() {
char c;
if(name.Length == 1) {
c = name[0];
} else {
c = ''0';
}
switch(c) {
case 'I':
break;
default:
//1. Do something
break;
}
switch(c) {
case 'A':
case 'B':
case 'C':
case 'D':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
break;
default:
//2. Do something
break;
}
switch(c) {
case 'A':
case 'B':
case 'D':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
break;
default:
//3. Do something
break;
}
switch(c) {
case 'A':
break;
default:
//4. Do something
break;
}
switch(c) {
case 'A':
case 'K':
case 'L':
break;
default:
//5. Do something
break;
}
switch(c) {
case 'A':
case 'B':
case 'D':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
break;
default:
//6. Do something
break;
}
switch(c) {
case 'A':
case 'L':
break;
default:
//7. Do something
break;
}
switch(c) {
case 'M':
//8. Do something
break;
case 'C':
//9. Do something
break;
default:
//10. Do something
break;
}
}