我一直想知道,但找不到一个明确的答案。什么时候我应该使用if或switch语句。什么时候一个比另一个好?
例如:
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
switch (buttonIndex) {
case 0:
//Stuff
break;
case 1:
//Stuff
break;
default:
break;
}
//OR
if (buttonIndex == 0) {
//Stuff
}
if (buttonIndex == 1) {
//Stuff
}
}
这只是一个例子,但我相信在不同的情况下,这将是不同的。
在这种情况下,这无关紧要。switch存在的原因是它比if更快。如果您编写if ... else if ... else if ...
的长代码,它的执行速度会比switch慢,因为if
进行迭代搜索(O(n)),而switch
进行基于表的查找(O(1))
我相信这是一个主观的问题。答案完全取决于你。
对于我自己的代码,我喜欢使用switch
语句,因为很明显,正在发生的事情是一些条件的结果,如果条件不同,可以做其他事情。
但是如果switch
case:
语句下面的代码相当长或复杂,那么对于我自己的代码,我会做第二件事:if (buttonIndex == 0) {
位。
如果您只检查一个变量是否具有一定的值(buttonIndex == 1),并对几个值执行此操作,您最好使用switch
。
然而,如果你正在使用一些更复杂的条件(甚至可能包括条件中的函数),那么你应该使用if statements
。
我希望看到代码尽可能接近人类的理解。这就是为什么三种形式的决策(if-then-else、switch-case-default、?:)适合于映射三个不同的过程:
-
…现在,如果有一个活动有一个复杂的唱反调,我们应该做……(否则……是
if
的映射) -
…现在根据quibplatz的值,我们应该做…如果是0,…如果是1(,…)如果是
switch
的映射 - …我们用…还是……基于这个事实,如果……是
?:
的映射
因此,使用映射到您作为人类思考实际决策的方式的方法。
当然,应该强调,在许多的场景下,适当的OO解决方案…我们确实……我们这样做是为了…这条路是……这样……,经常使用switch
的地方(但它也适用于某些if
)是不使用这些结构,而是用多态代替它们。只有在有真正的决策时才应该进行人工决策,而不是伪造(逻辑)多态性。
Switch语句比嵌套的if语句更快。就是这样。
Switch
就像if elseif
一样。太多的Switch
或if elseif
将使您的代码难以阅读和理解。但是没有任何功能问题。
这取决于你想在里面做什么。请记住,不能在switch语句
如果' If '和'switch'是如此邪恶,它们应该从现代编程语言中删除。事实是他们还在那里。我认为关键是我们应该尽最大努力使我们的代码正确有效地工作,易于理解和维护。OOP只是编写程序的一种方式,我们不应该为纯OOP编写程序。所以这是一个主观问题。