Fork me on GitHub

コードの構造について

if/for文は常に波括弧 {} をつける

ifやfor等、波括弧 {} を省略できるものがありますが、基本的に省略せずにかきましょう

// Bad!
if (something)
        // do something

// Good!
if (something) {
        // do something
}

Note

if (something) return; というようにスグにreturnするだけの場合は省略しても悪くは無いが、 出来れば付けていたほうがよい。

比較は常に厳密に行う

NSStringを比較する場合 == で文字列を比較するのは避けるべきです。 == による比較は文字列としての比較ではなく、同じポインタの値かどうかの比較になります。

文字列の比較を行う場合は isEqualToString: メソッドを使い比較します。

/Code/Tests/CompareTests.m

#import <SenTestingKit/SenTestingKit.h>
#import <OCHamcrestIOS/OCHamcrestIOS.h>

@interface CompareTests : SenTestCase

@end

@implementation CompareTests

- (void)testEqual {
    NSString *one = @"1";
    NSString *eins = [NSString stringWithFormat:@"%c", '1'];
    BOOL isEqualOperator = (one == eins);// ポインタ値は一致しない
    assertThatBool(isEqualOperator, equalToBool(NO));
    BOOL isEqualMethod = [one isEqualToString:eins];// 文字列的には一致する
    assertThatBool(isEqualMethod, equalToBool(YES));
}
@end

Note

定義済みの文字列定数同士を == で比較した場合は問題無いですが、 それを考えて行うのは難しい所もあるので、基本的に文字列の比較はメソッドを使って行う方がよい。

一般にオブジェクト同士の値を比較する場合は適当な isEqual*:compare: といったメソッドが用意されているはずなので、 それを利用し比較するべきです。(intやNSUInteger等のプリミティブな値はC言語と同様に == で比較して問題ありません)

See also

Objective-Cによるプログラミング P40
“オブジェクトの等価性を判断する” に == , isEqual: , compare: について書かれている。

真偽値の比較は省略する

BOOL型等の真偽値をif文等において比較するのは、あまり意味がなく冗長になるだけなので、 避けるべきです。

BOOL hasYES = YES;
// Bad!
if(hasYES == YES){ /* somthing */ }
// Good!
if(hasYES){ /* somthing */ }