【objc-zen-book】1.条件语句&Case语句

作者: ForeverYoung21 | 来源:发表于2015-09-24 07:51 被阅读195次

    这个小系列是从 "Zen and the Art of the Objective-C Craftsmanship"中 进行的摘抄,共分成6篇,大部分是讲代码风格及美化,偶尔看看也不错。


    • 条件语句

      条件语句体应该总被大括号包围。只有一行代码最好也加上,否则会带来安全隐患。

      // 推荐
      if (!error) {
          return success;
      }
      
      // 不推荐
      if (!error)
          return success;
      
      if (!error) return success;
      
    • 尤达表达式(Yoda)

      不要使用尤达表达式。(名字起源于星球大战中尤达大师的讲话方式,总是用倒装的语序)

      // 推荐
      if ([myValue isEqual:@42]) { ...
      
      // 不推荐
      if ([@42 isEqual:myValue]) { ...
      
    • nil和BOOL的检查

      一些人喜欢用这样的方式来检查nil:

      if (nil == myValue) { ...
      

      这样做可以避开少些一个"=“的错误,因为一旦少写一个”=“,那么nil是不能被赋值的,编译器会报错。

      但是前面提到,最好不要使用尤达表达式。所以更好的解决方法是用”!”来完成nil和BOOL的检查。

      // 推荐
      if (someObject) { ...
      if (![someObject boolValue]) { ...
      if (!someObject) { ...
      
      // 不推荐
      if (someObject == YES) { ... // Wrong
      if (myRawValue == YES) { ... // Never do this.
      if ([someObject boolValue] == NO) { ...
      
    • 不要嵌套多个if语句

      不要嵌套多个if语句,而是使用多个return来避免增加复杂度,并提高代码可读性。

      也就是说,在一个方法中,重要的部分尽量不要放在if语句中,而是将”其它情况”放在if中。

      // 推荐
      - (void)someMethod {
        if (![someOther boolValue]) {
            return;
        }
      
        //Do something important
      }
      
      // 不推荐
      - (void)someMethod {
        if ([someOther boolValue]) {
          //Do something important
        }
      }
      
    • 复杂的表达式

      当一个判断条件很复杂时,应该将它们提取出来赋值给一个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;
      
      // 不推荐
      result = a > b ? x = c > d ? c : d : y;
      

      当三元运算符的第二个参数(if 分支)返回和条件语句中已经检查的对象一样的对象的时候,下面的表达方式更灵巧:

      // 推荐
      result = object ? : [self createObject];
      
      // 不推荐
      result = object ? object : [self createObject];
      
    • 错误处理

      有些方法通通过参数返回 error 的引用,使用这样的方法时应当检查方法的返回值,而非 error 的引用。

      // 推荐
      NSError *error = nil;
      if (![self trySomethingWithError:&error]) {
          // Handle Error
      }
      
    • switch语句中的case,如果只有一行代码可以不必加上大括号,但是多行需要加上。

      switch (condition) {
          case 1:
              // ...
              break;
          case 2: {
              // ...
              // Multi-line example using braces
              break;
             }
          case 3:
              // ...
              break;
          default: 
              // ...
              break;
      }
      
    • 枚举类型

      使用NS_ENUM()这个宏来定义枚举,它有更强大的的类型检查和代码补全。

      typedef NS_ENUM(NSUInteger, ZOCMachineState) {
          ZOCMachineStateNone,
          ZOCMachineStateIdle,
          ZOCMachineStateRunning,
          ZOCMachineStatePaused
      };
      

    所有文章
    【objc-zen-book】1.条件语句&Case语句的注意
    【objc-zen-book】2.命名
    【objc-zen-book】3.类
    【objc-zen-book】4.Category & NSNotification
    【objc-zen-book】5.美化代码 & 代码组织
    【objc-zen-book】6.Block & self的循环引用

    相关文章

      网友评论

        本文标题:【objc-zen-book】1.条件语句&Case语句

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