编写高质量代码的52个有效方法

52个有效方法(19) - 使用清晰而协调的命名方式

2018-09-04  本文已影响14人  SkyMing一C
Objective-C的命名方式
方法命名
//工厂方法(factory method),用于创建新的空字符串。方法名清晰地描述了返回值的类型。
+ (instancetype)string;
//工厂方法,根据某字符串创建出与之内容相同的新字符串。与创建空字符串所用的那个工厂方法一样,方法名的第一个单词也指明了返回类型。
+ (instancetype)stringWithString:(NSString *)string;
//工厂方法,根据特定格式创建出新的"本地化字符串"(localized string)。返回值类型是方法名的第二个单词(string),因为其前面还有个修饰语(localized)用来描述其逻辑含义。此方法的返回值依然是"字符串"(string),只不过是一种经过本地化处理的特殊字符串。
+ (instancetype)localizedStringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
//获取字符串长度(也就是其字符个数)。这个方法只有一个词,因为实际上length也是字符串的一个属性。这个属性可能不是由实例变量来实现的,然而即便如此,它也依然是字符串中的属性。此方法若是命名为stringLength就不好了。string一词多余,因为该方法的接收者肯定是个字符串。
- (NSUInteger)length;
//首个参数buffer应该指向一个足够大的数组,以便容纳所请求范围内的那些字符。此方法要通过其参数来返回(这种参数通常称为"输出参数'(out-parameter)), 而不通过返回值来返回,从内存管理的角度看,这样做更好。所有内存管理事宜均由方法调用者处理,而不是先在此方法中创建一个数组,然后再又调用者释放。第二个参数前有个描述其类型的名词(range),如果还有其他参数,也应该在方法名中提到其类型。有时参数名前面还会加介词,例如,此方法可以命名为"getCharacters:inRange:"。当需要特别强调众参数中的某一个时,通常会这样命名。
- (void)getCharacters:(uinichar*)buffer range:(NSRange)aRange;
//NSMutableString
  - (void)appendString:(NSString *)aString;
//判断两字符串是否相等。其返回值和"hasPrefix:"一样,都是Boolean型,为了便于述说,方法名用is开头。还有个地方也会用到is这个前缀词,那就是Boolean型的属性。比方说,有个属性叫做enabled,则其两个存取方法应该分别起名为"setEnabled:"与isEnabled。
 - (BOOL)isEqualToString:(NSString *)aString;
//判断本字符串是否以另一个字符串开头。由于返回值是Boolean类型,所以为了读起来像个句子,这种方法的名称中通常都包括has("是否有")一词。
- (BOOL)hasPrefix:(NSString *)str;
//首个参数buffer应该指向一个足够大的数组,以便容纳所请求范围内的那些字符。此方法要通过其参数来返回(这种参数通常称为"输出参数'(out-parameter)), 而不通过返回值来返回,从内存管理的角度看,这样做更好。所有内存管理事宜均由方法调用者处理,而不是先在此方法中创建一个数组,然后再又调用者释放。第二个参数前有个描述其类型的名词(range),如果还有其他参数,也应该在方法名中提到其类型。有时参数名前面还会加介词,例如,此方法可以命名为"getCharacters:inRange:"。当需要特别强调众参数中的某一个时,通常会这样命名。
- (void)getCharacters:(uinichar*)buffer range:(NSRange)aRange;
类与协议的命名
UIView
//所有"视图"(View)均继承于此类。视图是构造用户界面的基本单元,它们负责绘制按钮、文本框(text field)、表格等控件。这个类的名字无须解释即可自明题意(self-explanatory)、开头的两个字母"UI"是UIKit框架的通用前缀。
UITableView
//这是一种特殊类型的视图,可以显示表格中的一系列条目。所以,它在超类(UIView)名称中的View一词前面加了Table这个修饰词,用以和其他类型的视图相区隔。在超类名称前加修饰语是一种常用的命名惯例。本类也可以叫做UITableView,不过这个名字无法完整传达出"视图"这个概念。开发者必须查看接口声明方能确定这一点。比方说,想创建一个专门用来显示图像的表格视图,那么就可以将这个继承自UITableView的子类命名为EOCImageTableView。不过这时要加上自己的前缀EOC,而不是沿用超类的前缀UI(UIKit框架中的类以UI为前缀)。这么做的原因在于,你不应该把自己的类放到其他框架的命名空间里面,那些框架以后也许会新建同名的类。
UITableViewDelegate
//此协议定义了表格视图与其他对象之间的通信接口,命名时,把定义"委托接口"(delegate interface)的那个类名(UITableView)放在前面,后面加上Delegate一词,这样读起来顺口。
要点
  1. 起名时应遵从标准的Objective-C命名规范,这样创建出来的接口更容易为开发者所理解。

  2. 方法名要言简意赅,从左至右读起来要像个日常用语中的句子才好。

  3. 方法名里不要使用缩略后的类型名称。

  4. 给方法起名时的第一要务就是确保其风格与你自己的代码或所要继承的框架相符。

上一篇 下一篇

猜你喜欢

热点阅读