基本编码规范 OC版本

本文的Java英文版出自veerasundar


前不久看到一个Java版本的十大常见违规编码。其中基本道理大部分语言都是通用的,我来整理一个object C 版本的吧。

(以下这些编码规范都是我在之前公司,我们项目组组长王磊给我灌输,并且不断强调的编码规范。他对我的代码风格有很大的影响,在此谢谢他对我不断地指导和帮助。)

  1. Xcode支持自动缩进和缩进纠正,我们只要选中需要格式化的代码,然后点击 Control + i。XCode 会自动帮我们把代码缩进弄好。不过在平时编写的时候也要注意,良好的缩进是可读性很重要的一部分,因为他能标示出哪些代码使数以一个整体的。

  2. 避免多个返回,这个印象很深刻,我因为这个事情,代码被拿到大家面前讲过,所以这个错误我一般不会犯。
    不好的写法:
    - (BOOL) isAdult:(NSInteger) userAge {
    
        if (userAge > 18) {
            return YES;
        }else{
            return NO;
        }
    }
    这样的写法,会导致一个函数中有多个返回的地方,有些处理,因为逻辑的需要不得不放到最后面做,但是就因为这样的结构忽略掉了。
    更好的写法:
    - (BOOL) isAdult:(NSInteger) userAge {
        
        BOOL result = NO;
        if (userAge > 18) {
            result = YES;
        }else{
            result = NO;
        }
        return result;
    }
    当然,因为逻辑比较简单,这样的写法看起来比较怪,但是如果逻辑判断比较复杂的话,这样写,方法于何时结束一目了然,必要的收尾动作也不会错过。

  3. 简化if-else。
    有时候会碰到结构很复杂的逻辑判断。我一般的做法有三种:
    1.能转用switch语句就尽量转用switch语句,
    2.不能转用的就把某一独立模块抽出来做成函数。
    3.简单的判断使用 条件?结果1:结果2 的方式表达。
  4. 对于If,if-else,while,for,switch,这些语句最好使用{ }扩起来。这样做的好处是代码结构清晰,你能分辨清楚每一个语句块。
    PS:在switch里面的case语句,最好使用{}括起来,这样使用ARC的时候不会出问题。(在使用switch时,ARC不允许在switch块内定义指针变量(或者对象,其实是一样的),如果需要在switch内定义指针变量,最好使用{}括起来,这样编译器在确定变量作用域时,才不会出错。)
    不好的写法:
    - (BOOL) isAdult:(NSInteger) userAge {
        
        BOOL result = NO;
        if (userAge > 18)
            result = YES;
        else
            result = NO;
        return result;
    }

    更好的写法:

    - (BOOL) isAdult:(NSInteger) userAge {
        
        BOOL result = NO;
        if (userAge > 18) {
            result = YES;
        }else{
            result = NO;
        }
        return result;
    }


  5. 多处使用的常量(包括字符串,数字等),最好使用宏定义。
    这样做的好处是,如果需要更改这个字串,我们只需要在一个地方做修改就可以了。

  6. 对于这样的常量字串推荐使用全部大写。就像这样:EXAMPLE_STATIC_STRING。
    这样做的好处是,类似的常量字串,我们在代码里,轻松就能发现。

  7. 每一个switch语句都应该有default,哪怕你什么也不写。
    default语句表明了程序在这种情况下,应该做什么处理,以便让后面的程序员了解。当然什么也不写,就告诉后来的程序员我们是这么处理的:什么也不用做。

  8. 在逻辑允许的情况下,将多个嵌套if判断放在单行内完成。
    不好的写法:

        if (userAge > 18) {
            if (registered != YES) {
                [self userRegister];
            }
        }
    更好的写法:
        if (userAge > 18 && registered != YES) {
            [self userRegister];
        }
  9. 在同一个类内有多个不同方面的代码时,可以使用
    #pragma mark -
    来区分不同的模块,XCode会自动创建一个分隔符在方法列表中以示区分。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章