2

私はまだプログラミングに非常に慣れていないので、可能な限りクリーンなコードを書きたいと思っています。

これはばかげた質問のように聞こえるかもしれませんが、メソッドをどの順序で配置すればよいでしょうか? 機能的にはもちろん問題ありませんが、レイアウトによって大きな違いが生じます。たとえば、1 つのクラスに次のコードがあるとします。

-(void)testCreateProjectWithStartDate {
    [self setUpTestCreateProjectWithStartDate];
    ...
}

-(void)setUpTestCreateProjectWithStartDate {
    testMOC = [self setUpInMemoryStore];
    [self mockOutXMLStoreForInMemoryStore];
}

- (NSManagedObjectContext *)setUpInMemoryStore {
    ...
    NSPersistentStoreCoordinator *coordMock = [self pscMock];
    ...
}

- (NSPersistentStoreCoordinator *)pscMock {
    ...
}

-(void)mockOutXMLStoreForInMemoryStore {
    ...
}

メソッドは呼び出された順に並んでいますか? クラス内の 2 つの場所からメソッドが呼び出された場合はどうなるでしょうか。

このコード スニペットは、私には完全に混乱しているように見えます。非常に単純なフローとは何かを把握するためだけに、これだけスキップしなければならないのは非常に混乱します。

メソッドのどの順序がより理にかなっていますか?

4

5 に答える 5

4

これはクラスよりもメソッドに当てはまることがわかりましたが、それは私が十分にやっていないからだと思います。十分に短くしておくと、これらのような質問は消えてしまいます。

したがって、メソッドについては、すべての変数を先頭で初期化するか、変数が使用される場所の近くで初期化するかについて長い間疑問がありました (答えは、変数が使用されている場所の近くにあります、fwiw)。メソッドは十分に短く、それは問題ではありません。それらが使用される場所の近く上部にあります。

少なくとも理論的には、クラスについても同じことが言えます。クラスを十分に短くしてください。内部構成は問題ではありません (制限的で不可能なケース: クラスごとに 1 つのメソッドのみ。宣言した順序で自動的に行われます)。クラスに非常に多くのメソッドがあり、どのように整理するか迷っている場合は、一緒に属するいくつかのメソッドを独自のクラスに抽出することを検討してください。小さいほどよい。

于 2009-05-30T23:33:57.540 に答える
3

プロジェクト/職場で従うべき基準がない限り、これに対する決定的な答えは私にはないようです。個人的には、別の標準に準拠していない場合は、コンストラクタを最初に配置し、次にデストラクタを配置します。その後、メソッド名のアルファベット順に並べます。私は少し恐竜なので(カーター政権からプログラミングをしています)、オブジェクト指向プログラミングのことを聞く前に、関数にアルファベット順のアプローチを採用し、オブジェクトを始めたときにそれを引き継いでいました。

于 2009-05-31T00:03:53.753 に答える
2

メソッドをグループ化するには、複数のオプションがあります。

  • 機能別 (つまり、互いに必要なメソッドが近くにある)
  • 可視性による (たとえば、インターフェイスで宣言された public メソッドが最初に来る)
  • 名前順 (つまり、メソッドは名前でソートされます)

個人的には、機能ごとにメソッドをグループ化することを好みます。そのため、フローをたどる場合、あまりジャンプする必要はありません。あなたのためにジャンプを行う最新のIDEでは、これはもはや大きな問題ではありません.

特定の例では、読みやすさを向上させるためにメソッドの数を減らしたい場合があります。メソッドがすべて非常に短く (2 ~ 3 行)、1 か所からしか呼び出されない場合は、コードをインライン化し、いくつかのメソッドを省略できます。

于 2009-05-30T23:23:33.740 に答える
1

私もこの問題を抱えています。クラスの役割に基づいてメソッドをグループ化しようとしました。このアプローチは、多くの問題が解決されないままになるため、実際には機能しません。私は最近、Objective-Cに次の規則を使い始めました。

メソッドは、、、、およびコンビニエンスメソッド(つまり、クラスの自動解放されたインスタンスを返すクラスメソッド)を除いてinitialize、オーディエンスのサイズが小さい順になってい ます。initdeallocawakeFromNib

//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
于 2009-07-30T08:45:54.810 に答える
1

私はいつも次のようにメソッドを注文します:

最初にコンストラクタ/デストラクタ、次にアクセサ、次にその他のメソッドを重要度順に並べています。

重要なメソッドが最初に表示されるため、ファイルを開くときに最も重要なメソッドにたどり着くまでスクロールを最小限に抑える必要があります。

public/protected/private の場合も同様です。最初に public であるため、ファイルを開くと、他のファイルから使用できるすべてのものがすぐに表示されます。

于 2009-05-30T23:28:16.007 に答える