語句
前提語句
前提語句體應當總被年夜括號包抄。只要一行代碼最好也加上,不然會帶來平安隱患。
// 推舉
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
};
變量
盡可能應用長的、描寫性的辦法和變量名。
// 推舉
UIButton *settingsButton;
// 不推舉
UIButton *setBut;
常量應當以駝峰法定名,並以相干類名作為前綴。
// 推舉
static const NSTimeInterval ZOCSignInViewControllerFadeOutAnimationDuration = 0.4;
// 不推舉
static const NSTimeInterval fadeOutTime = 0.4;
推舉應用常量來取代字符串字面值和數字。可以便利復用,疾速修正。
常量應當用static聲明為靜態常量,而不要用#define,除非它明白作為宏來應用。
// 推舉
static NSString * const ZOCCacheControllerDidClearCacheNotification = @"ZOCCacheControllerDidClearCacheNotification";
static const CGFloat ZOCImageThumbnailHeight = 50.0f;
// 不推舉
#define CompanyName @"Apple Inc."
#define magicNumber 42
常量假如須要裸露給內部,那末要在頭文件中以如許的情勢:
extern NSString *const ZOCCacheControllerDidClearCacheNotification;
並在完成文件中為它賦值。
只要私有的常量才須要添加定名空間作為前綴。雖然完成文件中公有常量的定名可以遵守別的一種形式,你仍然可以遵守這個規矩。
辦法名與辦法類型(-/+符號)間應加上一個空格。
辦法段間也應當以空格距離。
參數前應當有一個描寫性的症結詞。
盡量罕用”and”這個詞,它不該該用來說明有多個參數。
// 推舉
- (void)setExampleText:(NSString *)text image:(UIImage *)image;
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;
- (id)viewWithtag:(NSInteger)tag;
- (instancetype)initWithWidth:(CGFloat)width height:(CGFloat)height;
// 不推舉
- (void)setT:(NSString *)text i:(UIImage *)image;
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;
- (id)taggedView:(NSInteger)tag;
- (instancetype)initWithWidth:(CGFloat)width andHeight:(CGFloat)height;
- (instancetype)initWith:(int)width and:(int)height; // Never do this.
應用字面值來創立弗成變的NSString,NSDictionary,NSArray和NSNumber對象。
用這類方法,留意不要將nil放在NSArray和NSDictionary裡,如許會招致瓦解。
NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];
NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal", @"Mobile Web" : @"Bill"};
NSNumber *shouldUseLiterals = @YES;
NSNumber *buildingZIPCode = @10018;
不要如許:
NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];
NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];
NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];
NSNumber *buildingZIPCode = [NSNumber numberWithInteger:10018];
防止如許的方法創立可變數組:
NSMutableArray *aMutableArray = [@[] mutableCopy];
如許的方法,在效力和可讀性上都存在成績。
效力:一個不用要的弗成變數組被創立後立時被放棄,並沒有需要。
可讀性:可讀性其實不好。
【Objective-C編程中語句和變量的一些編寫標准建議】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!