这种情况下的ObjC方法命名约定?

时间:2012-06-14 08:17:50

标签: iphone objective-c ios methods naming-conventions

我有一个代表考试的课程,它可以开始/重置/暂停考试,所以方法如下:

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

但据我所知,如果方法名称以某个名词结尾,它应该有该名词的参数,例如:

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

但是在这种情况下,该类被命名为“Exam”,所以当使用该类时,人们会知道该对象是一个考试,所以看起来更好的命名方式是:

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

所以我可以使用is as:

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

看起来好于:

[exam startExam];

[exam examStart];

但这确实看起来太通用了,我觉得风险很大,因为NSObject(或任何超级类)可能会在将来添加相同名称的方法,例如,Java Object有notify,notifyAll,wait和子类不应该为了其他目的覆盖这些。在Objective C中也是如此吗?

那么这种情况下最好的命名约定是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

在目标C中,没有人会真正期望方法startExam采取任何论据。这将是方法startExam:(注意尾随冒号)。这些是不同的方法,你甚至可以在同一个类上。所以,我会选择startExam

答案 1 :(得分:1)

开始/暂停/重置属于班级Exam。所以我会选择:

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

当我使用班级Exam的对象时,我只是在脑海里读到它:

[myExam start]; 

对我来说比这更有意义:

[myExam startExam];

对于具有输入参数的那个:

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

PS:但我可以看到自己在做Dirk的建议。

答案 2 :(得分:0)

  

但这确实看起来很通用,

不是我没有。鉴于对象为考试建模,您的方法中的“考试”一词是多余的。如果你看到代码

[myExam start];

除了考试还有什么其他的东西?