Objective-C 프로 그래 밍 의 문장 과 변수의 작성 규범 제안

7640 단어 Objective-C
문장
조건문
조건 부 문 체 는 항상 대괄호 로 둘러싸 여야 한다.코드 한 줄 만 추가 하 는 것 이 좋 습 니 다.그렇지 않 으 면 안전 위험 을 가 져 올 수 있 습 니 다.

//
if (!error) {
    return success;
}

//
if (!error)
    return success;

if (!error) return success;

유 다 표현 식(Yoda)
유 다 표현 식 을 사용 하지 마 세 요.이름 은 스타워즈 에서 유 다 대사 가 말 하 는 방식 에서 기원 되 었 으 며,항상 거꾸로 된 어순 을 사용한다)

//
if ([myValue isEqual:@42]) { ...

//
if ([@42 isEqual:myValue]) { ...

닐 과 볼 의 검사.
어떤 사람들 은 이런 방식 으로 nil 을 검사 하 는 것 을 좋아한다.

if (nil == myValue) { ...
이렇게 하면'='의 오 류 를 피 할 수 있 습 니 다.왜냐하면'='을 적 게 쓰 면 nil 은 할당 되 지 않 고 컴 파일 러 가 잘못 보고 할 수 있 기 때 문 입 니 다.
그러나 앞서 언급 한 바 와 같이 유 다 표현 식 을 사용 하지 않 는 것 이 좋다.그래서 더 좋 은 해결책 은"!"닐 과 볼 의 검 사 를 마 치 겠 습 니 다.

//
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;

3 원 연산 자의 두 번 째 매개 변수(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 로 정적 상수 로 표시 해 야 합 니 다.

//
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 대상 을 만 듭 니 다.
이런 식 으로 닐 을 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];
이런 방식 은 효율 과 가 독성 에 문제 가 있다.
효율:불필요 한 가 변 배열 이 만들어 진 후 바로 폐기 되 며 필요 하지 않 습 니 다.
가 독성:가 독성 이 좋 지 않 습 니 다.

좋은 웹페이지 즐겨찾기