你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Objective-C編程中語句和變量的一些編寫標准建議

Objective-C編程中語句和變量的一些編寫標准建議

編輯:IOS開發綜合

語句
前提語句

前提語句體應當總被年夜括號包抄。只要一行代碼最好也加上,不然會帶來平安隱患。

// 推舉
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編程中語句和變量的一些編寫標准建議】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved