任务:看完思考完以后修改自己项目中几处命名有问题的代码,有则改之 ,无则加勉。
<一>基础: **第一个原则:Clarity (清晰) (1).命名简洁固然好,然是一定不要因为简洁而影响了清晰度. 好的例子:insertObject:atIndex: , Good. 插入对象:在索引:xx. 坏的例子:insert:at: ,Not clear; what is being inserted? what does “at” signify? 不清楚;插入了什么?at是什么意思?
(2) .不要使用缩写,即使很长也要把它们拼出来。 您可能认为缩写是众所周知的,但它可能不是,特别是当开发人员遇到您的方法或函数名时,它具有不同的文化和语言背景。 如果要用缩写参考:https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/APIAbbreviations.html#//apple_ref/doc/uid/20001285-BCIHCGAE
(3).避免命名歧义,多加注释。(避免API名称中的歧义,例如可能以多种方式解释的方法名称)
**第二个原则:Consistency (一致性)
(1).当您的类的方法应该利用多态性时,一致性尤其重要。在不同的类中执行相同操作的方法应该具有相同的名称。 例如:
- (NSInteger)tag 。 Defined in NSView, NSCell, NSControl. 定义在NSView, NSCell, NSControl中。
(2).没有自我参考,名字不应该是自我参照的。No Self Reference 。 Names shouldn’t be self-referential。 例子:可以的 : NSString。 自我参照的:NSStringObject Self-referential.
(3). 掩码常量(因此可以按位操作组合)是该规则的一个例外,通知名称的常量也是如此。 Constants that are masks (and thus can be combined in bitwise operations) are an exception to this rule, as are constants for notification names.
例子:NSUnderlineByWordMask 。 NSTableViewColumnDidMoveNotification 。 都是可以的。
<二>前缀: 前缀可以防止第三方开发人员定义的符号与Apple定义的符号(以及Apple自己的框架中的符号)之间的冲突。 前缀有规定的格式。它由两三个大写字母组成,不使用下划线或“子前缀”。下面是一些例子: NS Foundation ,IB Interface Builder。 在命名类、协议、函数、常量和typedef结构时使用前缀。命名方法时不要使用前缀;方法存在于由定义它们的类创建的名称空间中。此外,不要使用前缀来命名结构的字段。
<三>排版约定(Typographic Conventions )
(1)对于由多个单词组成的名称,不要使用标点符号作为名称的一部分或分隔符(下划线、破折号等);相反,应该将每个单词的首字母大写,并将它们连在一起(例如,将单词连在一起)——这就是所谓的“骆驼壳”。但是,请注意以下条件: 对于方法名,以小写字母开头,并将嵌入单词的第一个字母大写。不使用前缀。 fileExistsAtPath:isDirectory: 此准则的一个例外是方法名以众所周知的首字母缩略词开头,例如TIFFRepresentation (NSImage)。
(2)对于函数和常量的名称,使用与相关类相同的前缀,并将嵌入单词的第一个字母大写。 NSRunAlertPanel NSCellDisabled
(3)避免使用下划线字符作为前缀,表示方法名中的私有(允许使用下划线字符作为实例变量名的前缀)。苹果保留使用这个约定。第三方使用可能导致名称空间冲突;它们可能会在不知情的情况下用自己的方法覆盖现有的私有方法,从而导致灾难性的后果。有关私有API应遵循的约定的建议,请参阅私有方法。
<四>头文件(Header Files)
你如何命名头文件是重要的,因为你使用的约定指出了什么文件包含:
(1).声明一个隔离的类或协议。如果类或协议不是组的一部分,则将其声明放在一个单独的文件中,该文件的名称是已声明的类或协议的名称。
NSLocale.h The NSLocale class.
(2).声明相关的类和协议。对于一组相关的声明(类、类别和协议),将声明放在一个以主类、类别或协议的名称命名的文件中。 NSString.h . NSString and NSMutableString classes. NSLock.h . NSLocking protocol and NSLock, NSConditionLock, and NSRecursiveLock classes.
(3).包括框架头文件。每个框架都应该有一个以框架命名的头文件,该头文件包含框架的所有公共头文件。 Foundation.h Foundation.framework.
向另一个框架中的类添加API。如果在一个框架中声明了另一个框架中类的类别中的方法,则在原始类的名称中添加“加法”;一个例子是应用程序工具包的nsbundleaddion .h头文件。 相关函数和数据类型。如果您有一组相关的函数、常量、结构和其他数据类型,请将它们放在一个适当命名的头文件中,如NSGraphics.h (Application Kit)。