我应该使用if或switch语句吗?objective - c



我一直想知道,但找不到一个明确的答案。什么时候我应该使用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一样。太多的Switchif elseif将使您的代码难以阅读和理解。但是没有任何功能问题。

这取决于你想在里面做什么。请记住,不能在switch语句

中分配新对象。

如果' If '和'switch'是如此邪恶,它们应该从现代编程语言中删除。事实是他们还在那里。我认为关键是我们应该尽最大努力使我们的代码正确有效地工作,易于理解和维护。OOP只是编写程序的一种方式,我们不应该为纯OOP编写程序。所以这是一个主观问题。

最新更新