码迷,mamicode.com
首页 > 其他好文 > 详细

总结-OC禅与艺术

时间:2016-11-05 22:41:32      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:bre   嵌套   and   表达   com   important   条件语句   运算符   creat   

条件语句

推荐写法,加上括号
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
};

  

总结-OC禅与艺术

标签:bre   嵌套   and   表达   com   important   条件语句   运算符   creat   

原文地址:http://www.cnblogs.com/williamliuwen/p/6033964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!