質問
私はプログラミングがまだ初心者なので、できるだけきれいなコードを書きたいと思っています。
ばかげた質問のように聞こえるかもしれませんが、メソッドはどのような順序で記述すべきでしょうか?もちろん機能的には問題ありませんが、レイアウトによっては大きな違いが生じます。1 つのクラスに次のコードがあるとします。
-(void)testCreateProjectWithStartDate {
[self setUpTestCreateProjectWithStartDate];
...
}
-(void)setUpTestCreateProjectWithStartDate {
testMOC = [self setUpInMemoryStore];
[self mockOutXMLStoreForInMemoryStore];
}
- (NSManagedObjectContext *)setUpInMemoryStore {
...
NSPersistentStoreCoordinator *coordMock = [self pscMock];
...
}
- (NSPersistentStoreCoordinator *)pscMock {
...
}
-(void)mockOutXMLStoreForInMemoryStore {
...
}
メソッドは呼び出される順序で並べられていますか?クラス内の 2 つの場所からメソッドが呼び出された場合はどうなるでしょうか?
このコード スニペットは私には完全に混乱しているように見えます。非常に単純なフローを理解するために、これだけスキップしなければならないのは非常に混乱します。
どのような順序でメソッドを実行するのがより意味があるでしょうか?
解決
メソッドをグループ化するには複数のオプションがあります。
- 機能別(すなわち、お互いを必要とするメソッドは近くにあります)
- 可視性による (例:インターフェイスで宣言されたパブリック メソッドが最初に来ます)
- 名前で(すなわち、メソッドは名前でソートされているだけです)
個人的には、メソッドを機能ごとにグループ化することを好みます。そのため、フローをたどるときにあまりジャンプする必要はありません。ただし、最新の IDE では自動的にジャンプを実行してくれるので、これはもう大きな問題ではありません。
特定の例では、読みやすさを向上させるためにメソッドの数を減らすことができます。メソッドがすべて非常に短く (2 ~ 3 行)、1 か所からのみ呼び出される場合は、コードをインライン化して一部のメソッドを省略できます。
他のヒント
私は、これは、クラスのより方法がより真実であることを発見した - しかし、私は、私はちょうど十分にそれをやっていないよので、それはだと思う:十分に短いそれを維持し、これらのような質問が消え
。だから、方法のために - 長い上部にあるすべての変数を初期化する、またはそれらを使用している場所の近くにそれらを初期化するかどうかについての質問があった(答えは、彼らが、FWIW使用している場所の近くにある) - しかし、もしあなたはそれだけで問題ありませんが、十分にあなたの方法は、短いキープ。彼らが使用している場所の近くに、のはのある上部にます。
十分に短いそれらを維持し、内部組織だけでかまいません。同じことは、クラスのために、少なくとも理論的には、行く(限定的であり、不可能な場合:クラスごとに1つの方法を、それはあなたが宣言どんな順序で自動的にあります)。自分のクラスに一緒に属しているいくつかのメソッドを抽出考える - あなたのクラスは、あなたが整理する方法を迷っているので、多くのメソッドを持っている場合。小さい方が良いです。
あなたのプロジェクト/職場のために従うべき基準を持っていない限り、これに決定的な答えであることを私には思えませんあります。私は別の標準に従っていないよ場合は個人的に、私は最初、デストラクタ(複数可)に続いて、コンストラクタ(複数可)を入れました。その後、私は、メソッド名のアルファベット順にそれらを置きます。私は恐竜のビット(私はカーター政権以来、プログラミングをしてきた)ので、私は私が今まで、オブジェクト指向プログラミングのことを聞いた前の関数のアルファベット順のアプローチを採用し、私はオブジェクトを始めたときにそれを引き継が。
私はいつもこのように私の方法を注文します
最初のコンストラクタ/デストラクタ、 その後、アクセサ、 その後、他の方法重要性によって並べ替えられます。
私は、ファイルを開いたときに重要な方法は、最初に、私は最も重要な方法を取得するには、少なくともをスクロールする必要があります。
そのためのパブリック/プライベート/保護:公共最初なので、ファイルを開くときに、他のファイルから使用することができるすべてはすぐに表示されている。
。私もこの問題を持っていました。私はクラスの役割に基づいてグループ方法にしてみてくださいでした。それはアドレスされていない多くのものを残しますので、そのアプローチは実際に動作しません。私は最近のObjective-Cのために次の表記法を使用して開始しました。
の方法はinitialize
、init
、dealloc
、awakeFromNib
及び便宜メソッド(クラスの自動解放インスタンスを返す、すなわちクラスメソッド)を除いて、視聴者サイズを減少させるためにある。
//initialze, init, dealloc, awakeFromNib
//convenience methods
//properties
//IBActions
//General public methods
//Delegate methods (eg NSResponder, NSTableview etc)
//Binding and notification call back methods
//private methods
私はまだヘッダファイルにivar
sを注文する方法がない100%確信しています。時間のために私はメモリ管理責任によってそれらを注文していますされます:
//IBOutlets
//other non-retained objects (eg delegates - these can most likely be labeled IBOutlet too)
//primative data types (no mm responsibilties)
//retained objects