这段代码看起来很脏,我无法弄清楚如何格式化它,这样我就可以阅读它,理解它,同时看起来干净。
if(center==2 && ((((y-height/2)==j) && ((x+width/2)==i)) || (((y+height/2)==j) && ((x+width/2)==i))))
regenerateDot(i+1, j, dots);
有什么建议吗?
答案 0 :(得分:17)
我会将布尔表达式分解为以可读性命名的变量。类似的东西:
bool isCentered = center == 2;
bool inLowerRegion = (y-height/2) == j && (x+width/2) == i;
bool inUpperRegion = (y+height/2) == j && (x+width/2) == i;
bool inEitherRegion = inLowerRegion || inUpperRegion;
if (isCentered && inEitherRegion) {
regenerateDot(i+1, j, dots);
}
答案 1 :(得分:6)
考虑重构。您可以将子表达式放入它们自己的函数中,从而命名它们的用途。
例如:
if (IsCentered(center) && IsInsideLower(y, j, i) && IsInsideUpper(y, j, i))
regenerateDot(i + 1, j, dots);
请注意,在上面的例子中,函数名称可能是假的(我还没有真正试图理解代码的目的是什么),但你应该得到图片。
答案 2 :(得分:2)
最多可以删除额外的大括号,添加一些空格并将逻辑分区放在不同的行中,
if(center == 2 &&
(((y - height/2) == j || (y + height/2) == j) && (x + width/2) == i))
{
regenerateDot(i+1, j, dots);
}
修改:您有一个我在此优化的冗余条件(x + width/2) == i
。
答案 3 :(得分:2)
对于复杂的事情,我可能会将其分解为每个条件(按共享&&组合)试图表示并将其分配给合理的变量名称。
答案 4 :(得分:1)
几乎所有的括号都是多余的......并且添加一些空格会变成:
if(center == 2 &&
(y - height/2 == j && x + width/2 == i ||
y + height/2 == j && x + width/2 == i))
regenerateDot(i+1, j, dots);
答案 5 :(得分:1)
我会这样做
if (2 == center &&
(((y - height/2) == j && (x + width/2) == i) ||
((y + height/2) == j && (x + width/2) == i))
)
{
regenerateDot(i + 1, j, dots);
}
答案 6 :(得分:1)
这与您发布的代码相同:
if( center == 2 )
{
if( (x+width/2) == i )
{
if( (y-height/2) == j ) || (y+height/2) == j ) )
{
regenerateDot(i+1, j, dots);
}
}
}
答案 7 :(得分:1)
重新订购会产生类似的结果:
if (center==2 && (i-x)==(width/2) && abs(j-y)==(height/2))
regenerateDot(i+1, j, dots);