我有一个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)
,如果我在第一个条件被调用之前计算一些复杂的东西,我可以得到假阳性的结果。on !something
values
除了goto
之外,没有任何语言特性允许您像这样任意地转移控制权。
从代码中的两个位置移动到另一个位置的另一种更好的方法是使用过程:方法或函数。我认为分解出else
分支的内容在这里是有序的。然后从内部if
和else
分支调用新过程。
您也可以考虑重构初始条件。应该有某种方法可以将这两种检查结合起来,而不必将它们塞进if()
标题的括号中。
在Objective-C中,我会事先使用布尔标志集,而不是使用if/else
,而是两个单独的if
语句,像这样(这是Swift代码,但它是相同的结构):
var needToDoSomethingElseComplex = false
if something {
// do stuff
if somethingComplex {
needToDoSomethingElseComplex = true
}
}
if !something || needToDoSomethingElseComplex {
// do something else complex
}
但是real Swift会给你一种优雅的方式来做你正在寻找的事情——switch
和fallthrough
:
switch something {
case true:
print("hey")
if somethingComplex {
fallthrough
}
print("ho")
case false:
print("ha")
}
在上面,如果something
为真,如果somethingComplex
为真,我们打印"hey"然后"ha",这正是你要找的流程。
…
BOOL shouldGoToB = false;
if (a) {
//run if logic
if (somethingComplex) {
shouldGoToB = YES;
}
}
if (!a || shouldGoToB) {
}