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];
이런 방식 은 효율 과 가 독성 에 문제 가 있다.효율:불필요 한 가 변 배열 이 만들어 진 후 바로 폐기 되 며 필요 하지 않 습 니 다.
가 독성:가 독성 이 좋 지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PreferenceBundle에서 오른쪽 상단에 Respring 버튼을 클릭합니다.만나서 반갑습니다, Minazuki라고합니다. 프로필 이름 : Minazuki_dev Twitter : Repo : 아직 중학생이므로 말이 이상한 곳이 있습니다만 용서해 주세요… 🙏 theos (Mac이든 단품이든 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.