2009-05-30 52 views
2

我對編程還很陌生,我想寫出最乾淨的代碼。任何類中的方法順序

這聽起來像一個愚蠢的問題,但我應該把什麼樣的順序我的方法?在功能上當然沒有關係,但佈局會產生巨大的差異。所以說,我們有下面的代碼在一個類:

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

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

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

- (NSPersistentStoreCoordinator *)pscMock { 
    ... 
} 

-(void)mockOutXMLStoreForInMemoryStore { 
    ... 
} 

我一定順序排列的方法,他們叫什麼名字?如果一個方法是從一個班的兩個地方調用的話會怎麼樣?

這段代碼看起來一塌糊塗,我 - 這是非常令人困惑不得不跳過一樣多,因爲這只是爲了弄清楚什麼是一個非常簡單的流程。

什麼順序的方法會更有意義?

+0

你要問哪些語言? – 2009-05-30 23:08:06

+0

這真的是一個語言不可知的問題,但我在Objective-C中編碼。 – 2009-05-30 23:58:34

回答

2

你有多種選擇,以便將方法:

  • 通過功能
  • 通過可見性(例如,在接口中聲明的公共方法來先)(即其需要彼此緊靠在一起的方法)
  • 按名稱(即方法只是通過他們的名字排序)

我個人更喜歡通過其功能組的方法,所以我不需要太遠,如果我跟蹤跳流量。隨着現代IDE的跳躍爲你做了這個不再是一個大問題了。

在您的具體示例中,您可能想要減少提高可讀性的方法數量。如果你的方法都很短(2-3行),只能從一個地方調用,你可以內聯代碼並省略一些方法。

+0

非常感謝大家爲您的精彩貢獻。這個問題甚至還沒有一小時,它已經有3個答案。輝煌。 – 2009-05-30 23:59:57

1

我總是爲了我的方法是這樣的:

第一個構造函數/析構函數,然後 存取, 然後按重要性排序的其他方法。第一

重要的方法,所以當我打開一個文件,我必須滾動的,至少可以得到的最重要的方法。

同爲公共/保護/私有:首次公開,所以在打開文件時,可以從其他文件中使用一切迅速可見。

+0

我喜歡這個解釋。但是,我很好奇你如何判斷一個功能比另一個功能更重要。 – Martin 2013-06-26 21:53:32

4

我發現這是比類的方法更真實的 - 但我想這是因爲我只是沒有做足夠的:保持足夠短,像這些問題消失。

因此,對於方法 - 長期以來一直存在問題,關於是否初始化頂部的所有變量,或者將它們初始化到使用位置附近(答案接近它們的使用位置,fwiw) - 但如果你保持足夠短的方法,那沒關係。在他們使用的地方的頂部是

至少在理論上,類同樣如此:保持足夠短,內部組織無關緊要(限制和不可能的情況:每個類只有一個方法;它以您聲明的任何順序自動執行)。如果你的類有很多方法,你不知道如何組織 - 考慮提取一些屬於他們自己的類的方法。越小越好。

3

對我來說,除非你有一個適合你的項目/工作場所的標準,否則對我來說這不是一個明確的答案。就個人而言,如果我沒有遵循另一個標準,我首先將構造函數放入,然後再放入析構函數。之後,我只是按方法名稱按字母順序排列。我有點恐龍(自卡特政府以來,我一直在編程),所以在我聽說過面向對象的編程之前,我採用了按字母順序排列的函數,並在開始執行對象時將它繼承下來。

1

我也有過這個問題。我確實嘗試根據班級的角色對方法進行分組。這種方法實際上並不奏效,因爲它留下了很多未解決的問題。我最近開始使用的Objective-C以下約定:

方法是在與initializeinitdeallocawakeFromNib和方便的方法(即類方法的異常減少觀衆人數的順序返回自動發佈類的實例)。

//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 

我還沒有100%確定如何在頭文件順序ivar秒。暫時我被內存管理責任,命令他們:

//IBOutlets 
//other non-retained objects (eg delegates - these can most likely be labeled IBOutlet too) 
//primative data types (no mm responsibilties) 
//retained objects