2012-06-14 58 views
0

我代表考試的一類,它可以啓動/復位/暫停考試,這樣的方法是這樣的:在這種情況下的ObjC方法命名約定?

- (void)startExam; 
- (void)resetExam; 
- (void)pauseExam; 

但據我所知,如果方法名稱與一些名詞結束,它應該有說法爲名詞,是這樣的:

- (void)startExam:(Exam *)exam; 

但是,在這種情況下,類被命名爲「考試」,因此使用類時,人們會知道對象是考試,所以它似乎更好的命名方式是:

@interface Exam : NSObject 
- (void)start; 
- (void)reset; 
- (void)pause; 
@end 

,所以我可以用是:

Exam *exam = [[[Exam alloc] init] autoreleased]; 
[exam start]; 

看起來優於:

[exam startExam]; 

[exam examStart]; 

但是,這看起來太普通了,我覺得風險是NSObject的(或者其他超類)可能會在將來添加相同名稱的方法,例如,Java Object有notify,notifyAll,wait和subclass不應該覆蓋這些for其他目的。目標C中這也是如此嗎?

那麼在這種情況下最好的命名約定是什麼?

謝謝!

回答

1

開始/暫停/重置屬於類Exam。所以,我會去的:

@interface Exam : NSObject 
- (void)start; 
- (void)reset; 
- (void)pause; 
@end 

當我使用的類的對象Exam我剛纔讀它在我的腦海:

[myExam start]; 

對於我來說,使比這更有意義:

[myExam startExam]; 

至於有輸入參數的那個:

- (void)startWith:(Exam *)exam; 

PS:但我可以看到自己在做德克建議的事情。

1

在目標C中,沒有人會真正期望方法startExam接受任何參數。這將是方法startExam:(注意尾部冒號)。這些是不同的方法,你甚至可以同時在同一個班上。所以,我會去startExam

+0

我不會。考慮到該方法發送給考試的對象,選擇器末尾的「考試」一詞是多餘的。 – JeremyP

+0

@JeremyP - 我認爲,它歸結爲一種品味問題。我個人發現'start','pause'和'reset'有點過於通用。 OTOH,如果環境似乎在這裏清楚,它並不重要。無論如何,我的主要觀點是,沒有混亂。 「方法需要一個參數」在這裏,由於Objective-C的語法。 – Dirk

0

但是,這看起來太普通了,

對我來說不是沒有。考慮到對象模型的考試,您的方法中的「考試」一詞是多餘的。如果你看到的代碼

[myExam start]; 

還有什麼開始除了考試?