下面是我用于对矩阵执行操作的类中包含的函数。该函数返回一个布尔值,第一个IF语句,如果NOT TRUE,它返回一个值false,所以我假设一旦它返回该值,函数的其余部分就不会执行,因为它已经返回了一个值。
如果我编写了函数,我会在附加到原始IF语句的ELSE构造中包含FOR循环。我不是一个专业的程序员,所以我很抱歉,如果答案很明显,我就不会用这种方式编写代码而且我很好奇,如果改变所有用这种方式编写的函数是值得的。
public bool IsIdentityMatrix()
{
if (!this.IsSquareMatrix())
{
return false;
}
for (int i = 0; i < this.RowCount; i++)
{
for (int j = 0; j < this.ColumnCount; j++)
{
decimal checkValue = 0;
if (i == j)
{
checkValue = 1;
}
if (mInnerMatrix[i, j] != checkValue)
{
return false;
}
}
}
}
答案 0 :(得分:2)
严格来说,这个方法可以分成两部分,并稍微重新组织,使其更具可读性(当然这是一个主观陈述!):
public bool IsIdentityMatrix()
{
if (IsSquareMatrix())
return checkSquareMatrixForIdentity();
else
return false;
}
private bool checkSquareMatrixForIdentity()
{
for (int i = 0; i < this.RowCount; i++)
{
for (int j = 0; j < this.ColumnCount; j++)
{
decimal checkValue = 0;
if (i == j)
{
checkValue = 1;
}
if (mInnerMatrix[i, j] != checkValue)
{
return false;
}
}
}
return true;
}
答案 1 :(得分:1)
你是对的,return语句在那一点停止执行函数,并且不会执行for循环。
我不认为不使用else语句是不好的方式,但它可能更清楚地表明只有在条件失败时才会执行循环。
我喜欢的代码是它将中断逻辑与。从技术上讲,if(this.IsSquareMatrix()){ <loop> }; return false;
本来是等价的,但由于这是一个递归函数,因此清楚地表示了中断条件,加上一个缩进级别更少:)
答案 2 :(得分:0)
所以我假设一旦它返回这个值,函数的其余部分就不会执行,因为它已经返回了一个值
这是正确的。事实上,当您使用像Resharper这样的IDE生产力加载项时,它会提示您以这种方式构建代码,以防止过度嵌套(这可能导致代码异味)。