首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Switch语句与If语句

Switch语句与If语句
EN

Stack Overflow用户
提问于 2012-07-12 23:54:17
回答 2查看 4K关注 0票数 2

我的项目中有很多if语句、嵌套if语句和if-else语句,我正在考虑将它们更改为switch语句。其中一些将具有嵌套的switch语句。我知道在编译方面,switch语句通常更快。我的问题是,一般情况下,哪一个更受欢迎?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-13 00:22:37

这里有一个重要的区别

switch语句接受具有整数结果的表达式,并将其与具有常量值的case语句进行匹配。Case语句不能是表达式...因此,当您需要根据一组确定的值计算一个整数结果时,那么switch语句是有意义的。

我想,嵌套的switch语句可能会给您的代码增加混乱……它的可读性不是很好。

下面是我使用Switch语句返回UIPickerView组件的适当数据源的示例

代码语言:javascript
复制
- (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结果,因此我经常将它们用于路由和决策点。这里我为我的不同数据源创建了一个枚举:

代码语言:javascript
复制
typedef enum
{
    HoursPickerComponent = 0,

    MinutesPickerComponent = 1,

    DaysPickerComponent = 2

} MedicationPickerComponents;

然后,我的UIPickerView组件的委托代码如下所示

代码语言:javascript
复制
- (NSInteger)pickerView:(UIPickerView *)pickerView 
numberOfRowsInComponent:(NSInteger)component
{
    return [[self datasourceForComponent:component] count];
}

我觉得这是一个很好的例子,说明了如何使用决策点的开关来提高代码的可读性。请注意,我没有在case语句中加入太多逻辑...这样,您就可以很容易地通过查看该switch语句来判断它的意图。如果我有更复杂的代码要运行,我会将其存根到一个方法中,然后从case语句中调用该方法。

票数 7
EN

Stack Overflow用户

发布于 2012-07-13 00:01:21

如果控制流依赖于具有1个或2个以上值的变量的值,则开关更有意义,并且更易于读取和维护。我在这里没有来源可以引用,但我相信他们无论如何都会编译成相同的本机代码,所以这不是性能或效率的问题。我认为你应该为了可读性而编写代码,并且当你有更多的条件时,一个开关比多个if更可取。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11455774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档