Objective C でプロパティ名にアンダースコアを付ける [重複] 質問する

Objective C でプロパティ名にアンダースコアを付ける [重複] 質問する

これまで私は変数名にアンダースコアを使うのを避けてきましたが、これは大学時代の Java 時代の名残かもしれません。そのため、Objective C でプロパティを定義するときは、自然にこれを行います。

// In the header
@interface Whatever
{
    NSString *myStringProperty
}

@property (nonatomic, copy) NSString *myStringProperty;

// In the implementation
@synthesize myStringProperty;

しかし、ほとんどすべての例では、次のように行われます

// In the header
@interface Whatever
{
    NSString *_myStringProperty
}

@property (nonatomic, copy) NSString *myStringProperty;

// In the implementation
@synthesize myStringProperty = _myStringProperty;

アンダースコアは唯一の方法なので、アンダースコアに対する嫌悪感を克服すべきでしょうか。このスタイルが好まれる理由はあるのでしょうか。

アップデート:最近の自動プロパティ合成では、@synthesizeを省略しても結果は同じになります。

@synthesize myStringProperty = _myStringProperty;

これは明らかに Apple の好みを示しています。それ以来、私は心配するのをやめて、アンダースコアを愛用するようになりました。

ベストアンサー1

私は常にアンダースコアを使用します。これにより、ローカル変数とインスタンス変数が明確に区別されます。また、次の状況でコンパイラの警告を回避できます。

@interface MyClass
{
    NSString *name
}

@property (nonatomic, copy) NSString *name;

- (id) initWithName:(NSString *) name;
@end

@implementation MyClass

@synthesize name;

// The following method will result in a compiler warning
// (parameter name same as ivar name)
- (id) initWithName:(NSString *) name {
   if (self = [super init]) {
      self.name = name;
   }

   return self;
}

@end

編集:

反対票に耐え、コメントを読み終えた後、私の意見を述べてみたいと思います。

Apple は、ivars の名前をプロパティと同じにすることを推奨しています。また、プロパティは小文字で始めることを推奨しています。また、ローカル変数も小文字で始めることを推奨しています。

ここで問題が発生します。コードを読んで、使用されている変数を見つけたとき、命名規則では、この変数が ivar なのかローカル変数なのかを判断できないからです。これは困ったものです。解決策は、ivars とローカル変数に異なる命名規則を使用することです。これはまったくの常識です。

この命名規則を実装する方法は重要ではありません。本当に必要な場合は、ivar 名に「_WOOHAHA」を追加できます。私は気にしません (ただし、他の人は気にするかもしれません)。重要なのは、何をすべきかわかっている人々が、ivars に「アンダースコア プレフィックス」を使用することを決定したことです。私の意見では、たとえ彼らの会社が別のものを推奨していたとしても、彼らは正しい決定を下しました。(私が話している開発者とは、いくつかの主要な Apple フレームワークと .NET Framework クラスを書いている人たちです)

結局のところ、コードの品質は、それを説く人々さえも従わない愚かなルールに従うことよりも重要です。


あなたが示したコードに関するもう一つの注意点:決して使用しないでください保持文字列プロパティでは、コピーその代わり。

プロパティのコピー/保持の詳細については、以下を参照してください。

NSString プロパティ: コピーするか保持するか?

おすすめ記事