WAR IS PEACE.
FREEDOM IS SLAVERY.
IGNORANCE IS STRENGTH.
战争即和平。
自由即奴役。
无知即力量。
---------《1984》
有空翻了翻苹果的文档,水平有限,将就看吧。
原文档链接:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingBasics.html
通用原则
清晰
1如果能兼顾清晰和简短的话,那就最好。但是不能因为简短而牺牲了清晰。(下面是栗子)
insertObject:atIndex: 好名字。
insert:at: 不清晰。什么被insert?at又指什么?
removeObjectAtIndex: 好名字
removeObject: 好名字。因为它删除参数指向的对象。
remove: 不清晰。什么被删除?
2通常来说,不要使用缩写。把名字全部拼写出来,即使很长。
destinationSelection 好名字
destSel 不清晰
setBackgroundColor: 好名字
setBkgdColor: 不清晰
你可能会认为某个缩写单词是大家都知道的,其实未必,尤其是对那些与你文化背景不同或者双语背景的开发者来说。
当然,有一些缩写是真的通用的,并且大家使用了很长时间。你可以继续使用它们。参看:Acceptable Abbreviations and Acronyms.
3API 的名字要避免歧义,比如方法名字可以有多种解释。
sendPort 是要发送port还是要返回port?
一致性
名字要尽量一致。如果你不确定,就浏览当前的头文件或者相关的文档。
1当你有个类的方法想要利用多态的时候,一致性就特别重要。不同类中的相同功能的方法应该使用相同的名字。
- (NSInteger)tag 在NSView,NSCell,NSControl中定义。
- (void)setStringValue:(NSString *) 在很多Cocoa的类中都有定义。
参考 Method Arguments.
2名字不应该是自指的。(什么是自指? 我也不太清楚)
NSString Okay.
NSStringObject 自指。
mask的常量例外。notification常量也是例外。
NSUnderlineByWordMask Okay.
NSTableViewColumnDidMoveNotification Okay.
前缀
编程中,前缀是名字的一个重要部分。前缀使得苹果定义的符号和第三方开发者定义的符号能够避免冲突。
1前缀有一定的格式。它包含两个或三个大写字母,不包含下划线和子前缀。
NS Foundation
NS Application Kit
AB Address Book
IB Interface Builder
当给类,协议,函数,常量,typedef结构体命名时要使用前缀。给方法命名时不使用前缀,方法存在于定义他们的的类的命名空间内。命名结构体的字段时也不用前缀。
排版约定
当给API元素命名时,请遵循一些简单的排版约定:
1由多个单词组成的名字,遵循驼峰命名法:各个单词的首字母大写,并且单词要连在一起。而不要用标点符号如下划线或破折号等等。但是注意下面的限制:
方法命名,以小写字母开头,嵌入的单词首字母大写。不要使用前缀。
fileExistsAtPath:isDirectory:
除非该方法的名字是以一个众所周知的缩写。如:TIFFRepresentation(NSImage)
函数和常量命名,使用与相关类相同的前缀,嵌入的单词首字母大写。如
NSRunAlertPanel
NSCellDisabled
2在方法名字里使用下划线字符作为前缀,来声明为私有的做法要避免。(而使用下划线字符来作为实例变量的名字是允许的)
类和协议命名
类的名字应该清晰地表明该类是做什么的或该类标示什么。而且要有个合适的前缀。这方面苹果有很多的例子可以参考,比如:NSString,NSDate,NSScanner,NSApplication,UIApplication,NSButton, andUIButton
协议应该根据他们如何打包分组行为来命名:
1大多数的协议都是把那些与任何一个类都没联系的相关方法分为一组。这样的协议应单独命名而不至于与类相混淆。通常使用...ing的格式:
NSLocking 好名字
NSLock 差名字,看起来像是一个类。
2有些协议把一些无关的方法分为一组。而不是分为几个小的协议。这些协议应该跟一个类关联在一起。这种情况通常是用类的名字来命名协议。
NSObject协议就是这种协议的一个例子。
头文件
1独立类或协议的声明。如果一个类或协议不是某个组的一部分,就把它的声明放到一个独立的文件中去。它的名字就是那个类或协议的名字。
NSLocale.hNSLocale类。
2相关类或协议的声明。对于一组相关的声明(类,协议,分类),把声明放在那个具有主要类(协议,分类)的文件里。
NSString.hNSString和NSMutableString类
NSLock.hNSLocking协议 和NSLock,NSConditionLock和NSRecursiveLock类
3包含框架头文件。每个框架都应该有个以该框架命名,包含所有该框架公开头文件的头文件。
4添加API到另一个框架的类中。If you declare methods in one framework that are in a category on a class in another framework, append “Additions” to the name of the original class; an example is theNSBundleAdditions.hheader file of the Application Kit.(这段实在不知道该怎么译了)
5相关的函数和数据类型。如果你有一些相关的函数,常量,结构体,数据类型,把他们放到一个合适的头文件里,比如NSGraphics.h
网友评论