【发布时间】:2016-05-05 08:23:20
【问题描述】:
我们的组织有一个必需的编码规则(没有任何解释):
if ... else if 结构应该用 else 子句终止
示例 1:
if ( x < 0 )
{
x = 0;
} /* else not needed */
示例 2:
if ( x < 0 )
{
x = 0;
}
else if ( y < 0 )
{
x = 3;
}
else /* this else clause is required, even if the */
{ /* programmer expects this will never be reached */
/* no change in value of x */
}
这设计用于处理什么边缘情况?
我还担心的原因是,示例 1 不需要 else,但 示例 2 需要。如果原因是可重用性和可扩展性,我认为两种情况都应该使用else。
【问题讨论】:
-
也许可以向贵公司询问原因和好处。乍一看,它迫使程序员考虑并添加注释“无需操作”。与 Java 的检查异常背后的推理相同(至少与争议一样)。
-
示例 2 实际上是一个很好的示例,说明
assert(false, "should never go here")可能有意义的地方 -
我们的组织有类似的规则,但没有那么细化。在我们的案例中,目的有两个。首先,代码一致性。其次,没有松散的字符串/可读性。要求 else,即使在不需要时,也会增加代码的清晰度,即使它没有记录在案。要求 else 是我过去做过的事情,即使在不需要时也是如此,只是为了确保我已经考虑了应用程序中所有可能的结果。
-
如果使用
if (x < 0) { x = 0; } else { if (y < 0) { x = 3; }},您总是可以击败。或者你可以只遵循这样的规则,其中许多是愚蠢的,只是因为你必须这样做。 -
@Thilo 我有点晚了,但仍然没有人发现错误:没有迹象表明 else 永远不会发生,只是它应该没有副作用(这在做的时候似乎很正常
< 0检查),因此断言将使程序崩溃,这可能是值在预期范围内的最常见情况。