我有一个if / else语句。
if (something) {
//run if logic
} else {
//run else logic
}
在if logic phase
期间,我可能会发现一些让我想要运行if / else语句的else部分的内容。逻辑阶段太复杂,不适合初始条件something
。
是否有类似break;
的内容可用于跳转到if / else语句的else
部分。
我目前正在这样做,但我的团队不喜欢使用goto
if (something) {
//run if logic
if (somethingComplex) {
goto elseSomething;
}
} else {
elseSomething:
//run else logic
}
再次注意somethingElseComplex
是一个布尔状态,通过运行一些太大/多行的复杂代码来适应我的初始if条件,否则我会完成:if (something && somethingComplex)
,如果我在调用第一个条件之前计算了一些复数,我就会得到假阳性结果。在!something
值
答案 0 :(得分:2)
除了goto
之外,没有语言功能允许您像这样任意转移控制权。
从代码中的两个位置移动到另一个位置的另一种更好的方法是使用过程:方法或函数。我认为在这里按顺序排除else
分支的内容。然后从内部if
和else
分支调用新过程。
您也可以考虑重构初始条件。应该有一些方法可以将这两个检查结合起来,而不必将它们粉碎到if()
标题的括号中。
答案 1 :(得分:1)
在Objective-C中,我使用预先设置的布尔标志,而不是使用if/else
而是使用两个单独的if
语句,这样(这是Swift代码,但它是相同的结构):
var needToDoSomethingElseComplex = false
if something {
// do stuff
if somethingComplex {
needToDoSomethingElseComplex = true
}
}
if !something || needToDoSomethingElseComplex {
// do something else complex
}
但是真正的 Swift会为您提供一种优雅的方式来完成您正在寻找的内容 - switch
与fallthrough
:
switch something {
case true:
print("hey")
if somethingComplex {
fallthrough
}
print("ho")
case false:
print("ha")
}
在上面,如果something
为真,如果somethingComplex
为真,我们打印“嘿”,然后打印“ha”,这正是您要寻找的流程。 / p>
答案 2 :(得分:1)
怎么样......
BOOL shouldGoToB = false;
if (a) {
//run if logic
if (somethingComplex) {
shouldGoToB = YES;
}
}
if (!a || shouldGoToB) {
}