Iphone 我应该使用if或switch语句吗?目标-C
我一直在想,但找不到确切的答案。何时应该使用“if”或“switch”语句。什么时候一个比另一个好 例如,我可以做:Iphone 我应该使用if或switch语句吗?目标-C,iphone,objective-c,if-statement,switch-statement,Iphone,Objective C,If Statement,Switch Statement,我一直在想,但找不到确切的答案。何时应该使用“if”或“switch”语句。什么时候一个比另一个好 例如,我可以做: -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ switch (buttonIndex) { case 0: //Stuff break; case 1:
-(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
语句,因为很明显,发生的事情是某些条件的结果,如果条件不同,这些条件可以做其他事情
但是,如果
开关下面的代码case:
语句相当长或复杂,那么对于我自己的代码,我会做第二件事:if(buttonIndex==0){
位。如果只检查一个变量是否具有特定值(buttonIndex==1)对多个值执行此操作时,最好使用开关
但是,如果您使用的是一些更复杂的条件(甚至可能包括条件中的函数),那么您应该使用
if语句
这取决于您希望在其中执行什么操作。
请记住,您不能像
if elseif
那样在switch语句中分配新对象。过多的switch
或if elseif
将使您的代码很难阅读和理解。但没有任何函数问题。在这种情况下,这无关紧要。存在切换的原因是它的速度更快如果您编写了一个长代码if…else if…else if…
它的执行速度将比switch慢,因为if
执行迭代搜索(O(n)),而switch
执行基于表的查找(O(1))如果“If”和“switch”如此邪恶,它们应该从现代编程语言中删除。事实是它们仍然存在。我认为关键是我们应该尽最大努力使代码正确有效地工作,易于理解和维护。OOP只是编写程序的一种方式,我们不应该为纯OOP编写程序。所以我这确实是一个主观问题。我希望代码尽可能接近人类的理解。这就是为什么三种形式的决策(if-then-else、switch-case-default、:)适合映射三种不同的过程:
- …现在,在一个事件中有一个蛙鸣的quibplatz,我们应该做…(否则…应该做)是
的映射,如果
)
- …现在基于quibplatz值,我们应该做…如果它是0,…如果它是1(,…如果它不是其中任何一个),如果
开关的映射
- …我们使用…或…是基于这样一个事实:如果…保持或不保持,则映射为
?:
当然,应该强调的是,在很多场景中,适当的OO解决方案是……我们这样做是为了……我们这样做是为了……我们这样做是为了……我们这样做是为了……我们这样做是为了……我们这样做是为了……我们这样做是为了……我们这样做是为了就是不要使用这些结构,而是用多相性代替它们。手动决策应该只在有真实决策时进行,而不是伪造(逻辑)多态性。Switch语句比嵌套的if语句更快。就是这样。还应该注意的是,
Switch
理论上可能更快。如果只有少数情况,则没有多大区别。正如@Dani在回答中提到的,Switch
需要O(1)if…else if…else if…
将为O(n)时执行的时间其中n是条件数。其中一个原因是使用if…else
构造时,每次点击条件时都必须对其进行评估,而开关
case是一个表格查找。请查看Dani的注释。这是基于算法复杂性的。对于您的示例,如果要使用switch
,第二步是使其成为多态调用(因为这是我在回答中编写的一个伪造多态性)。除非使用{and}@progrmr创建一个新的作用域块,否则不能在交换机内声明局部变量。这就是重点。您可以在交换机内分配新对象