用正确的方法来努力来命名这个方法
很长一段时间c#/ java/C++程序员,品牌spankin是客观的新手C.阅读指南,看看api的,但还没有完全按照命名约定。用正确的方法来努力来命名这个方法
示例:假设我有一个Cars类,每个车都有一个数组,并且您希望方法返回数组的一个子集。
我看到NSArray有一个方法:getObjects,但在大多数情况下我没有看到“get”。所以 你喜欢什么?
所有投入都赞赏!花了太多时间思考这件事。
选项A) - (NSArray *)getCarsWithColor:(NSString *)color;选项B) - (NSArray *)getCars:(NSString *)withColor;
Optoin C) - (NSArray *)carsWithColor:(NSString *)color;选项D) - (NSArray *)汽车:(NSString *)withColor;
选项E)以上都不是,将其命名为XXXXXXXXXXXX的....
感谢。
Objective-C方法很少以get
命名。 getObjects:
方法中只有get
,因为结果放置在输入参数的缓冲区中。
-(void)getObjects:(id*)aBuffer;
^^^^ ^^^^^^^
而您的方法没有填充缓冲区,但返回一个数组。选项(A)和(B)已经结束。另外,参数的种类通常是选择器名称的一部分(在:
之前的东西),例如,
-(UIView*)viewWithTag:(NSInteger)tag
^^^^^^^
// not view:(NSInteger)withTag
-(CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view
// not convert:(CGPoint)point from:(UIView*)view;
所以选项(D)不鼓励。
有关命名方法的详细指南可以在Coding Guidelines for Cocoa: Naming Methods中找到。本指南还包括您可能感兴趣的其他公约。
选项C是最好的。除非获得指向C数组的指针,否则不要使用“get”,而只应为引用它们的方法签名命名参数。
这种方式,与多个参数较长的方法是清晰的:
-(NSArray *)carsWithColor:(NSColor *)color
wheels:(NSInteger)wheels
seats:(NSInteger)seats
premiumInterior:(BOOL)premiumInterior ...
...它可以简化为:它描述给别人当-carsWithColor:wheels:seats:premiumInterior:...
。
Objective-C方法名称不使用get
前缀。因此选项C最接近正确,但需要注意aWithB
构造意味着返回的NSArray *
将是autorelease
-d。
“C”是执行此操作的标准方法。 get
在吸气剂中很少使用,更详细的carsWithColor
是首选。
哦,有很多方法可以做你想做的事情!通常,除非你定义了一个自定义的getter,否则应该避免使用“get ...”符号,以避免混淆。我投票选择C,“ - (NSArray *)carsWithColor:(NSString *)颜色;”。
除了其他人都说过的话,我会好奇你为什么要在Cars类中存储一个NSArray对象。这听起来像汽车是一个NS [可变]阵列ivar包含汽车类的实例。然后,你根本不需要这个方法。如果您使用的是核心数据,那么您将执行一次读取操作,如果您只是自己处理NSArray,则可以使用谓词来过滤数组的对象。我认为这是让你感到非常可可的一面。如果你确实需要这个方法,然后将它包含的NSArray像伊娃的对象上定义:
NSArray *cars = [NSArray arrayWithObjects:car1, car2, car3, nil];
(NSArray *)carsWithColor:(NSString *)color{
return [cars filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"color == %@", color]];
}
该代码是未经测试,但它是我将如何处理这个问题。该方法实际上是一种控制器类型的方法,不应该成为模型逻辑的一部分。 Cars类听起来像是混淆了MVC。
+1这是一个很好的观点。为什么课堂本身会跟踪实例? – 2010-11-14 17:34:44
感谢您对谓词的输入。我是c#中扩展方法的忠实粉丝,并且谓词似乎提供了相同的功能。我在汽车上的例子是动态构造的,以表明我对如何命名方法的困惑。 – yellowdog 2010-11-15 03:22:35