有一些我需要执行验证的变量。伪代码如下,但我觉得必须有一个更优雅的解决方案。
If ( var != A || var != B || var != C || var != D )
{
reject
}
else if ( var == A || var == B)
{
do validation applicable to A or B
}
else if ( var == A || var == B || var == C || var == D )
{
do validation applicable to all valid vars
}
答案 0 :(得分:2)
原始伪代码不正确,因此我对所需行为做了一些合理的假设。
// If var not equal to any of A,B,C or D...
if ( var != A && var != B && var != C && var != D )
{
reject
}
// Otherwise var equal to one of A,B,C or D
else
{
// If it is A or B...
if( var == A || var == B )
{
do validation applicable to A or B
}
do validation applicable to all valid vars
}
或者您可以按如下方式翻转逻辑:
// If var equal to one of A,B,C or D
if( var == A || var == B || var == C || var == D )
{
// If it is A or B...
if( var == A || var == B )
{
do validation applicable to A or B
}
do validation applicable to all valid vars
}
else
{
reject
}
可能更清楚。
答案 1 :(得分:0)
switch
:
switch (var)
{
case A:
case B:
validate_ab();
// break here if desired
case C:
case D:
validate_all();
break;
default:
reject();
}
但这需要var
具有整数类型。
答案 2 :(得分:0)
if ( var < 'A' || var > 'D' )
{
reject
}
else if ( var < 'C')
{
do validation applicable to A or B
}
else
{
do validation applicable to all valid vars
}
答案 3 :(得分:0)
这取决于var可以采用的值的类型,但如果可能的话,为什么不尝试使用bitflags呢?假设它是示例的int,它可以包含任何位标志A,B,C,D。
#define A 0x01
#define B 0x02
#define C 0x04
#define D 0x08
if((var & (int)0xF) == 0)
{
//reject
}
else if(var &(int) 0x3 != 0)
{
//applicable only to A or B
}
else if((var & (int)0xF) != 0)
{
//do validation applicable to all valid vars
}
您可能无法在特定应用程序中使用bitflags,但如果可以的话,那么与您给出的示例类似,这将对您有所帮助。
答案 4 :(得分:0)
我认为使用开关是不错的选择。以下是我对可读代码的看法
int a=0,b=0,c=0,d=0;
switch(var){
case A :
a=1;
if(b && c && d)
do validate applicable to all valid vars
else if(b)
do validation applicable to A or B
return;
case B :
b=1;
if(a && c && d)
do validate applicable to all valid vars
else if(a)
do validation applicable to A or B
return;
case C :
c=1;
if(a && b && d)
do validate applicable to all valid vars
return;
case D :
d=1;
if(a && b && c)
do validate applicable to all valid vars
return;
default :
reject;
return;
}