2012-06-14 56 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]; 

还有什么开始除了考试?