我的项目中有很多if语句、嵌套if语句和if-else语句,我正在考虑将它们更改为switch语句。其中一些将具有嵌套的switch语句。我知道在编译方面,switch语句通常更快。我的问题是,一般情况下,哪一个更受欢迎?
发布于 2012-07-13 00:22:37
这里有一个重要的区别
switch语句接受具有整数结果的表达式,并将其与具有常量值的case语句进行匹配。Case语句不能是表达式...因此,当您需要根据一组确定的值计算一个整数结果时,那么switch语句是有意义的。
我想,嵌套的switch语句可能会给您的代码增加混乱……它的可读性不是很好。
下面是我使用Switch语句返回UIPickerView组件的适当数据源的示例
- (NSMutableArray *) datasourceForComponent:(NSInteger)component
{
switch (component) {
case HoursPickerComponent:
return _hours;
break;
case MinutesPickerComponent:
return _mins;
break;
case DaysPickerComponent:
return _days;
break;
default:
return nil;
break;
}
}这是我用来避免魔术字符串或时髦的条件逻辑的常见模式。由于枚举返回int结果,因此我经常将它们用于路由和决策点。这里我为我的不同数据源创建了一个枚举:
typedef enum
{
HoursPickerComponent = 0,
MinutesPickerComponent = 1,
DaysPickerComponent = 2
} MedicationPickerComponents;然后,我的UIPickerView组件的委托代码如下所示
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
return [[self datasourceForComponent:component] count];
}我觉得这是一个很好的例子,说明了如何使用决策点的开关来提高代码的可读性。请注意,我没有在case语句中加入太多逻辑...这样,您就可以很容易地通过查看该switch语句来判断它的意图。如果我有更复杂的代码要运行,我会将其存根到一个方法中,然后从case语句中调用该方法。
发布于 2012-07-13 00:01:21
如果控制流依赖于具有1个或2个以上值的变量的值,则开关更有意义,并且更易于读取和维护。我在这里没有来源可以引用,但我相信他们无论如何都会编译成相同的本机代码,所以这不是性能或效率的问题。我认为你应该为了可读性而编写代码,并且当你有更多的条件时,一个开关比多个if更可取。
https://stackoverflow.com/questions/11455774
复制相似问题