许多条件,减少代码大小
Many conditions, reducing code size
除了在if内部使用if分支来检查并满足所有要求的条件之外,还有其他好的解决方案吗?这样写看起来代码有点大,我想减少代码大小,但适合我的需要。
if(a>0 && b>0 && c>0)
{
if(a==d && b==e && c==f)
{
if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
{
if(true)
{
}
}
}
}
由于您的代码片段没有任何 else
语句,您可以将代码缩减为
if (<condition1> && <condition2> && <condition3>)
等等。
您可以使用逻辑与运算符 (&&
):
if (cond1 && cond2 && cond3) {
// action
}
相当于:
if (cond1) {
if (cond2) {
if (cond3) {
// action
}
}
}
只要您不需要特定于任何这些条件的 else
子句,这就很有用。
条件将从左侧计算,因此如果 cond1
将是 false
,则不会计算 cond2
和 cond3
。
编辑:如果您有许多条件需要为真才能采取行动,并且您关心代码的可读性,我会将它们分组首先是布尔变量,即:
int isCar = has4Wheels && hasBreaks && hasEngine;
int isASportsCar = hasLargeEngine && hasLowSuspension && hasManualControls;
int isFerrari = isV12 && isRed && hasANiceLogo;
if (isCar && isASportsCar && isFerrari) {
// action
}
示例可能很愚蠢,但您明白了。
由于您没有与 if 关联的 else 子句,因此只需将所有条件放在一起,例如:
if (thisCondition && thatCondition ..) {}
- 如果声明了变量
a
、b
、c
unsigned
,那将减少 if
.
- 如果不存在特定的 else 块,则可以合并两个 if 语句
然后您可以将代码缩减为
unsigned a, b, c; // if declared as unsigned or if d, e, f are known to be positive
if (a == d && b == e && c == f && a < FIELD_HEIGHT && b < FIELD_WIDTH) {
...
}
跟进:
if ( (a>0 && a<FIELD_HEIGHT && a==d)
&& (b>0 && b<FIELD_WIDTH && b==e)
&& (c>0 && c==f)
)
{
...
}
并假设变量是 unsigned
整数:
if ( (a && a<FIELD_HEIGHT && a==d)
&& (b && b<FIELD_WIDTH && b==e)
&& (c && c==f)
)
{
...
}
我觉得这个可以:
if(a>0 && b>0 && c>0)
{
if(a==d && b==e && c==f)
{
if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
{
}
}
}
在你的代码中,最后的判断:"if(true)"是多余的
除了在if内部使用if分支来检查并满足所有要求的条件之外,还有其他好的解决方案吗?这样写看起来代码有点大,我想减少代码大小,但适合我的需要。
if(a>0 && b>0 && c>0)
{
if(a==d && b==e && c==f)
{
if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
{
if(true)
{
}
}
}
}
由于您的代码片段没有任何 else
语句,您可以将代码缩减为
if (<condition1> && <condition2> && <condition3>)
等等。
您可以使用逻辑与运算符 (&&
):
if (cond1 && cond2 && cond3) {
// action
}
相当于:
if (cond1) {
if (cond2) {
if (cond3) {
// action
}
}
}
只要您不需要特定于任何这些条件的 else
子句,这就很有用。
条件将从左侧计算,因此如果 cond1
将是 false
,则不会计算 cond2
和 cond3
。
编辑:如果您有许多条件需要为真才能采取行动,并且您关心代码的可读性,我会将它们分组首先是布尔变量,即:
int isCar = has4Wheels && hasBreaks && hasEngine;
int isASportsCar = hasLargeEngine && hasLowSuspension && hasManualControls;
int isFerrari = isV12 && isRed && hasANiceLogo;
if (isCar && isASportsCar && isFerrari) {
// action
}
示例可能很愚蠢,但您明白了。
由于您没有与 if 关联的 else 子句,因此只需将所有条件放在一起,例如:
if (thisCondition && thatCondition ..) {}
- 如果声明了变量
a
、b
、c
unsigned
,那将减少if
. - 如果不存在特定的 else 块,则可以合并两个 if 语句
然后您可以将代码缩减为
unsigned a, b, c; // if declared as unsigned or if d, e, f are known to be positive
if (a == d && b == e && c == f && a < FIELD_HEIGHT && b < FIELD_WIDTH) {
...
}
跟进
if ( (a>0 && a<FIELD_HEIGHT && a==d)
&& (b>0 && b<FIELD_WIDTH && b==e)
&& (c>0 && c==f)
)
{
...
}
并假设变量是 unsigned
整数:
if ( (a && a<FIELD_HEIGHT && a==d)
&& (b && b<FIELD_WIDTH && b==e)
&& (c && c==f)
)
{
...
}
我觉得这个可以:
if(a>0 && b>0 && c>0)
{
if(a==d && b==e && c==f)
{
if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
{
}
}
}
在你的代码中,最后的判断:"if(true)"是多余的