• 总结-OC禅与艺术


    条件语句
    
    推荐写法,加上括号
    if (!error) {
        return success;
    }
    
    不推荐写法
    if (!error)
        return success;
    
    表达式
    
    推荐写法
    if ([myValue isEqual:@42]) { ...
    
    不推荐写法
    if ([@42 isEqual:myValue]) { ...
    
    nil和bool检查
    
    推荐写法
    if (someObject) { ...
    if (![someObject boolValue]) { ...
    if (!someObject) { ...
    
    不推荐写法
    if (someObject == YES) { ... // Wrong
    if (myRawValue == YES) { ... // Never do this.
    if ([someObject boolValue] == NO) { ...
    
    方法中重要的部分不要嵌套在分支里面
    
    推荐写法
    如果条件不满足,就退出,如果条件满足,就继续执行方法内的代码,这些代码没有在条件分支里面,而是在条件分支外面
    - (void)someMethod {
      if (![someOther boolValue]) {
          return;
      }
    
      //Do something important
    }
    
    不推荐写法
    下面的写法我经常使用,就是判断某条件满足,然后执行条件中的代码,应该好的做法是像上面一样
    - (void)someMethod {
      if ([someOther boolValue]) {
        //Do something important
      }
    }
    
    复杂表达式
    
    推荐做法
    当你有一个复杂的 if 子句的时候,你应该把它们提取出来赋给一个 BOOL 变量,这样可以让逻辑更清楚,而且让每个子句的意义体现出来。
    BOOL nameContainsSwift  = [sessionName containsString:@"Swift"];
    BOOL isCurrentYear      = [sessionDateCompontents year] == 2014;
    BOOL isSwiftSession    = nameContainsSwift && isCurrentYear;
    
    if (isSwiftSession) {
        // Do something very cool
    }
    
    三元运算符
    推荐写法
    result = a > b ? x : y;
    
    不推荐写法
    一个条件语句的所有的变量应该是已经被求值了的。类似 if 语句,计算多个条件子句通常会让语句更加难以理解
    result = a > b ? x = c > d ? c : d : y;
    
    情况2:当三元运算符的第二个参数(if 分支)返回和条件语句中已经检查的对象一样的对象的时候
    推荐写法
    result = object ? : [self createObject];// 就是后面不写多一次object
    
    不推荐写法
    result = object ? object : [self createObject];
    
    错误处理
    推荐写法
    有些方法通过参数返回 error 的引用,使用这样的方法时应当检查方法的返回值,而非 error 的引用。
    NSError *error = nil;
    if (![self trySomethingWithError:&error]) {
        // Handle Error
    }
    
    Case语句
    
    - 除非编译器强制要求,括号在 case 语句里面是不必要的。但是当一个 case 包含了多行语句的时候,需要加上括号。
    - 使用 fall-through 在不同的 case 里面执行同一段代码。一个 fall-through 是指移除 case 语句的 “break” 然后让下面的 case 继续执行。
    - 当在 switch 语句里面使用一个可枚举的变量的时候,default 是不必要的
    - 当使用 enum 的时候,建议使用新的固定的基础类型定义,因为它有更强大的类型检查和代码补全。 SDK 现在有一个 宏来鼓励和促进使用固定类型定义 - NS_ENUM()
    - 为了避免使用默认的 case,如果新的值加入到 enum,程序员会马上收到一个 warning 通知
    
    // 一个case有多行语句,加上括号
    switch (condition) {
        case 1:
            // ...
            break;
        case 2: {
            // ...
            // Multi-line example using braces
            break;
          }
        case 3:
            // ...
            break;
        default:
            // ...
            break;
    }
    
    // fall-through,就是执行case1继续执行下面的case,不停止
    switch (condition) {
        case 1:
        case 2:
            // code executed for values 1 and 2
            break;
        default:
            // ...
            break;
    }
    
    // 不使用default
    switch (menuType) {
        case ZOCEnumNone:
            // ...
            break;
        case ZOCEnumValue1:
            // ...
            break;
        case ZOCEnumValue2:
            // ...
            break;
    }
    
    // warning通知
    Enumeration value 'ZOCEnumValue3' not handled in switch.(枚举类型 'ZOCEnumValue3' 没有被 switch 处理)
    
    // 使用NS_ENUM()
    typedef NS_ENUM(NSUInteger, ZOCMachineState) {
        ZOCMachineStateNone,
        ZOCMachineStateIdle,
        ZOCMachineStateRunning,
        ZOCMachineStatePaused
    };
    

      

  • 相关阅读:
    Description Resource Path Location Type Java compiler level does not match the version of the instal
    myeclipse导入项目后,项目类中报Base64错
    Oracle中查询一个字符串的长度的函数
    异常QueryTimeoutException和for input String
    myeclipse中的内存溢出PermGen space
    SecureCRT--下重启服务器
    清除tomcat的缓存
    oracle 定时任务 job 调用存储过程有回到输出参数(含out参数)
    Spring之AOP
    @RequestParam、@PathVariable、@RequestBody区别
  • 原文地址:https://www.cnblogs.com/williamliuwen/p/6033964.html
Copyright © 2020-2023  润新知