努力用正确的方法命名这种方法

时间:2010-11-14 16:55:31

标签: iphone objective-c

很长一段时间c#/ java / c ++程序员,品牌spankin new to objectivce C。阅读指南,看看api's,但还没有完全符合命名惯例。

示例:假设我有一个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 ....

感谢。

6 个答案:

答案 0 :(得分:5)

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中找到。本指南还包括您可能感兴趣的其他公约。

答案 1 :(得分:1)

选项C是最好的。除非你得到指向C数组的指针,否则永远不要使用“get”,并且只应为引用它们的方法签名命名参数。

这样,具有多个参数的更长方法更清晰:

-(NSArray *)carsWithColor:(NSColor *)color 
                   wheels:(NSInteger)wheels 
                    seats:(NSInteger)seats 
          premiumInterior:(BOOL)premiumInterior ...

...在向其他人描述时可以缩短为:-carsWithColor:wheels:seats:premiumInterior:...

答案 2 :(得分:1)

“C”是执行此操作的标准方法。 get在getter中很少使用,而且更为详细carsWithColor

答案 3 :(得分:1)

除了其他人所说的内容之外,我很好奇为什么你要在Cars类中存储NSArray对象。听起来像汽车是一个NS [Mutable]阵列ivar包含汽车类的实例。然后,您根本不需要这种方法。如果您正在使用Core Data,那么您将进行提取,如果您只是自己处理NSArray,则可以使用谓词来过滤数组的对象。我认为这是我的问题中最不可靠的方面。如果你确实需要这个方法,那么它将在包含NSArray ivar的对象上定义,如:

NSArray *cars = [NSArray arrayWithObjects:car1, car2, car3, nil];
(NSArray *)carsWithColor:(NSString *)color{
    return [cars filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"color == %@", color]];
}

该代码未经测试,但这是我如何解决问题。该方法实际上是一种控制器类型方法,不应该是模型逻辑的一部分。让Cars课听起来像是混乱的MVC给我。

答案 4 :(得分:0)

Objective-C方法名称不使用get前缀。所以选项C最接近正确,但需要注意的是aWithB构造意味着返回的NSArray *将是autorelease - d。

答案 5 :(得分:0)

哦,有很多方法可以做你想做的事!通常,除非您定义自定义的getter,否则应避免使用“get ...”表示法,以避免混淆。我投票选项C,“ - (NSArray *)carsWithColor:(NSString *)颜色;”。