美文网首页
如何优化if else if

如何优化if else if

作者: 小_梦 | 来源:发表于2020-06-22 17:16 被阅读0次

最近在优化以前的旧代码,发现代码中有大量的if else if的代码块

主要存在以下问题:

问题1: if else 嵌套层次比较多

问题2: 代码中if else if第一层就多大大十几个 (吓死宝宝了)

针对以上两个问题简单的说一下自己的思路,同时也是对最近工作的一个总结,希望对大家有帮助

解决问题:

  1. 条件合并
if(条件1){
    if(条件2){
    
    }
}

条件合并之后:

if(条件1 && 条件2){

}
  1. 把if else 中的业务分散到函数中
函数1{
   if(条件1){
    调用函数2;
} 

函数2{
   if(条件2){
} 
  1. 拆成一个一个的函数后,最外层还是有很多if else,同时if中的条件是比较有一定规范的时候可以采用动态调用函数的方式

a. 把条件和函数名设置成数据源

b. 使用for循环来动态决定调用哪个函数

下面是我的项目中实际用到的,大家可以参考一下

+ (RB_LinkUtil *)share{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        linkUtil = [[RB_LinkUtil alloc]init];
        // 采用单利的方式为了数据源只初始化一次
        [linkUtil initDataSource];
    });
    return linkUtil;
}

- (void)initDataSource{
    _dataArray = @[
        @{@"link":@"XXXX", @"methodName":@"goto_ft_link"},
        
        @{@"link":@"XXXX", @"methodName":@"goto_resautantDetail"},
        
        @{@"link":@"XXXX", @"methodName":@"goto_ordersList"},
        
        @{@"link":@"XXXX", @"methodName":@"goto_ordersDetail"},
        
        @{@"link":@"XXXX", @"methodName":@"goto_tracking"},
        
        @{@"link":@"XXXX", @"methodName":@"goto_couponsList"},
        
        @{@"link":@"XXXX", @"methodName":@"goto_messages_person"},
        
        @{@"link":@"XXXX", @"methodName":@"goto_messagesList"},
        
        @{@"link":@"XXXX", @"methodName":@"goto_restaurants"},

    ];
}

/**
 *所有的link跳转
 *linkStr:link
 *dataDic:除去link字符串后,用于所有业务需要的参数都存放在此处
 *link:使用规制说明
     去掉了之前十多个if else if的判断采用了objc_msgSend方式来触发函数
     新增link规制需要改动
     1. 数据源处需要添加上对应的link和函数名字 例如:@{@"link":@"link链接", @"methodName":@"函数名字"}
     2. 函数名字的定义是带三个参数的 如:- (void)to_ft_linkgo:(NSString *)linkStr currentVC:(UIViewController *)currentVC dataDic:(NSMutableDictionary *)dataDic
     to_ft_link是函数名名字,参数必须跟上面一致
     3. 所有的注释按照已经实现的注释写,注释只能比现有的多不能没有注释
 */
- (void)linkJupActionLink:(NSString *)linkStr dataDic:(nullable NSDictionary *)dataDic{
    PublicClass*public = [PublicClass setPublicClass];
    public.publicRestaurantModel = nil;
    UIViewController *currentVC = [ViewUtil jsd_getCurrentViewController];

    [_dataArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSDictionary *theObjec = (NSDictionary *)obj;
        if ([linkStr containsString:theObjec[@"link"]]) {
            NSString *methodName = theObjec[@"methodName"];
            NSString *sSelectorStr = [NSString stringWithFormat:@"%@:currentVC:dataDic:",methodName];
            SEL linkMehtodSEL = NSSelectorFromString(sSelectorStr);
            if ([self respondsToSelector:linkMehtodSEL]) {
                ((void( *)(id, SEL, id, id, id))objc_msgSend)(self, linkMehtodSEL, linkStr, currentVC, dataDic);
            }
            *stop = TRUE;
        }
    }];
    
}

#pragma mark - 跳转到webview ft_link
- (void)goto_ft_link:(NSString *)linkStr currentVC:(UIViewController *)currentVC dataDic:(NSMutableDictionary *)dataDic{

}
#pragma mark - 自己定义的跳转规则 #/resautantDetail
- (void)goto_resautantDetail:(NSString *)linkStr currentVC:(UIViewController *)currentVC dataDic:(NSMutableDictionary *)dataDic{
    
}

下面是很多if 条件中调用的函数

相关文章

  • 如何优化if else if

    最近在优化以前的旧代码,发现代码中有大量的if else if的代码块 主要存在以下问题: 问题1: if els...

  • 技术总结 | 策略模式

    问题:如何优化代码中大量的 if/else ? 提前 return。 使用 switch ... case。 使用...

  • if/else优化

    优化 if/else 语句 当逻辑或||时,找到为 true 的分项就停止处理,并返回该分项的值,否则执行完,并返...

  • 优化if else

    引用地址:https://www.jianshu.com/p/4c035c271a10

  • 优化 if/else

    代码中经常有一些 if/else 连环判断,如果是入参判断,我们可以使用 Hibernate-Validator ...

  • 代码存在大量的if/else优化方案总结

    过多的else if 会使代码臃肿而简陋,下面是优化方案总结 一、多个else if分支优化 1.Key-valu...

  • 如何优化if..else代码

    if...else是我们平时写代码时经常用到的,而且使用起来也没啥问题。问题是当业务逻辑比较复杂时,一堆条件判断就...

  • 如何优化代码中大量的if/else,switch/case?

    如何优化代码中大量的if/else,switch/case?1、使用枚举2、善用Optional3、表驱动法4、提...

  • 优化 if - else代码

    在javascript流程控制中并没有像java中有goto跳转,所以基本上都是用if...if 或者if...e...

  • 优化if-else

    简介: 从一开始学编程的时候,就开始接触到if-else,也是最简单的一个条件分支,包括到现在,依然很重要,在代码...

网友评论

      本文标题:如何优化if else if

      本文链接:https://www.haomeiwen.com/subject/bthffktx.html