2009-11-07 26 views
10

この質問は、目的のcとココアの変数命名スタイルに関するものです。私はちょうど良いアイデアを "正しい"答えを探していないと強調したいと思います。ココアのインスタンス変数の命名規則

私はAppleとGoogleの客観的なCスタイルのガイドを読んできましたが、私はどちらかに満足していません。 Appleのガイドには、インスタンス変数とローカル変数に関する実際のスタイルの推奨事項はありません。実際、Cocoaライブラリ自体は、インスタンス変数とまったく同じ名前の関数パラメータを持つことで完全に満足しているようです。それは私が個人的にうんざりさせる。

Googleのガイドでは、インスタンス変数に末尾のアンダースコアを指定するよう指定しています。大丈夫です。しかし、それは、@synthesize property = property_を使ってすべてのパブリックプロパティを合成することを示唆しています。他の人はわかりませんが、プロジェクトのすべてのインスタンス変数についてこれを行うつもりなら、私は気になりません。私はそれが無駄で紛らわしい解決策だと思う。

私はオブジェクトプロパティのmyX(たとえば "myInstanceVariable")命名スタイルを使いたいと思っていますが、私はめったにそのスタイルを目的のcで見たことはありません。

だから、何を使用していますか?そこにどんなスタイルのコンベンションがあっても、私はあなたが有用であると知っているか分からないのですか?インスタンス変数と同じ名前の関数パラメータは、特に複数の開発環境では危険ですか?おかげでみんなとギャル!

注 - 多くの人々が指摘しているように、私の専門用語はOPの中にありませんでした。元の言い回しが明快さを傷つけば謝罪しますが、その点はまだ明らかです。

答えて

10

が、私は非接頭辞インスタンス変数名を使用する傾向がある(「メンバ変数は、」それはObjective-Cのではそうではありませんこれは、主に交換可能な構造とクラスの暗示だとC++イズムがあることに注意してください) 、とあいまいさが生じ例では、私は例えば、「A」または「an」はとのタイプによってパラメータに名前を付けるのSmalltalkの規則を使用します。

- (void)setFoo:(SOFoo *)aFoo; 
{ 
    foo = aFoo; 
} 

(もちろん、現代にObjCであなたの思いこれにはプロパティを使用してください)

の代わりにもやや一般的です。 this questionへの回答を参照してください。

Googleのコンベンションは、あなたが本当に紛争を心配している場合に意味があります。 Xcode text macroまたはCompletion DictionaryまたはAccessorizerのようなツールを使用してディレクティブを生成すると、採用が非常に簡単です。

Cocoa key-value coding guidelinesは、(a)インスタンス変数名に接頭辞/接尾辞を付けないか、(b)接頭辞/接尾辞の付いていないアクセサを実装(または合成)するかのいずれかを想定しています。他の人が触れたように、_プレフィックスは使用しないでください。 Appleのフレームワークで使用するために予約されています。

+0

良い答えです。私は、パラメタの接頭辞が目的のCインスタンス変数に規約を振り回すよりもきれいであることに同意します。 appleのdocsでは、一般的なNSObject型の場合にこのための規則が記述されています。したがって、独自の型に拡張することは理にかなっています。 これは答えとしてマークしています。これは、クラス関数のあいまいな名前空間を避けて、私の質問の要点に最もよく答えるためです。また、奇妙な慣習や回避策も追加していません。 – DougW

-1

m_variableNameもメンバ変数でよく使用されます。 個人的には、ほとんどの場合、私は両方の変数に同じ名前を付けて、this.varnamevarnameの区別をしています。

+0

にそう私は時折m_Xを見てきましたが、Objective Cの中セッター大会でそれは厄介なようです。 setM_variableName?私はあなたがドット記法に固執すればそれを避けると思います。 – DougW

+1

"m_"接頭辞は悪い習慣です。あなたがアップル社内で使用するコードを書いていない限り、単一の先頭のアンダースコアもそうです。残念なことに、アップルは、適切なクリーンアップを行わずに、いくつかのサンプルコードプロジェクトを街に打ち込んだ。 – NSResponder

+1

_fooはなぜ悪い習慣ですか? AppleはObj-C 1.0コードにivarsを追加することができないので、あなたのものを破壊することはできません。そして私が理解しているように、コンパイラはObj-C 2.0でそれらを調整するので、Appleはあなたのコードのコンパイルを中断しやすい(修正しやすい)が、すでにコンパイルされたプログラムは引き続き動作する。 –

4

ココアでは、スタイルはpascalCaseを持つようになっています(または、キャメルケースですか?私は思い出せません)。メンバー変数にアクセサメソッドと同じ名前を付けることができます。 (例えば、NSInteger anInteger,- anIntegerおよび- setAnInteger:など)。

これは最高のスタイルではないかもしれませんが、多くの仕組みがこの種の命名規則を前提としているため、Cocoaで何らかの作業を行う場合は、それに慣れるのは良い考えです。

+0

確かに、私はgetter/setterの義務化された慣行を知っていて、私はラクダのケースから逸脱しないでしょう。私の質問は、インスタンス変数とメンバ変数の違いを表すのに使用される表記法の線に沿っています。 実際、Googleスタイルのように任意の変数の任意の名前でアクセサメソッドを合成できますが、これはIMOを非常に混乱させる可能性があります。 – DougW

6

まず、Objective-Cには「メンバ変数」はありません。「インスタンス変数」または「ivars」があります。

Googleは、Objective-CコーディングやMac開発に関するいかなる種類の権限もありません。 Google EarthはQtアプリだ。

私は現時点では見つからないObjective-C用のAppleの公式コーディングスタイルガイドを覚えているようです。この記事では、しかし、かなり良い要約です:それを

http://cocoadevcentral.com/articles/000082.php

を発見します!ここではココアのためのAppleの公式のコーディングのガイドラインがあります:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

+0

リンゴのガイドラインをリンクしていただきありがとうございます。私はこれの残りの部分は話題だと思う。誰もが専門用語分類法の知識を活用したいと思っていますが、手元にある質問には答えません。また、Googleは目標cを発明していないかもしれませんが、コーディング規則については確かに有効な情報源です。この場合、私はAppleのドキュメントがこれについて明確に明確ではなく、Googleがあるとは思わない。私はちょうど彼らの答えを嫌うことが起こる。 – DougW