本文的Java英文版出自
veerasundar
前不久看到一个Java版本的十大常见违规编码。其中基本道理大部分语言都是通用的,我来整理一个object C 版本的吧。
(以下这些编码规范都是我在之前公司,我们项目组组长王磊给我灌输,并且不断强调的编码规范。他对我的代码风格有很大的影响,在此谢谢他对我不断地指导和帮助。)
- Xcode支持自动缩进和缩进纠正,我们只要选中需要格式化的代码,然后点击 Control + i。XCode 会自动帮我们把代码缩进弄好。不过在平时编写的时候也要注意,良好的缩进是可读性很重要的一部分,因为他能标示出哪些代码使数以一个整体的。
- 避免多个返回,这个印象很深刻,我因为这个事情,代码被拿到大家面前讲过,所以这个错误我一般不会犯。
不好的写法:
这样的写法,会导致一个函数中有多个返回的地方,有些处理,因为逻辑的需要不得不放到最后面做,但是就因为这样的结构忽略掉了。- (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; }
- 简化if-else。
有时候会碰到结构很复杂的逻辑判断。我一般的做法有三种:
1.能转用switch语句就尽量转用switch语句,
2.不能转用的就把某一独立模块抽出来做成函数。
3.简单的判断使用 条件?结果1:结果2 的方式表达。 - 对于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; }
- 多处使用的常量(包括字符串,数字等),最好使用宏定义。
这样做的好处是,如果需要更改这个字串,我们只需要在一个地方做修改就可以了。
- 对于这样的常量字串推荐使用全部大写。就像这样:EXAMPLE_STATIC_STRING。
这样做的好处是,类似的常量字串,我们在代码里,轻松就能发现。
- 每一个switch语句都应该有default,哪怕你什么也不写。
default语句表明了程序在这种情况下,应该做什么处理,以便让后面的程序员了解。当然什么也不写,就告诉后来的程序员我们是这么处理的:什么也不用做。
- 在逻辑允许的情况下,将多个嵌套if判断放在单行内完成。
不好的写法:
更好的写法:if (userAge > 18) { if (registered != YES) { [self userRegister]; } }
if (userAge > 18 && registered != YES) { [self userRegister]; }
- 在同一个类内有多个不同方面的代码时,可以使用
来区分不同的模块,XCode会自动创建一个分隔符在方法列表中以示区分。#pragma mark -