我正在自学Objective-C,我在很多书籍和示例中注意到在常量定义中使用'k'和camel-casing,例如
#define kMyConstant 0
“k”的含义是什么?这是 Objective-C 风格所独有的,还是一般 C 语言所共有的?为什么偏离(我一直认为的最佳实践)K_MY_CONSTANT 风格?
谢谢。
我正在自学Objective-C,我在很多书籍和示例中注意到在常量定义中使用'k'和camel-casing,例如
#define kMyConstant 0
“k”的含义是什么?这是 Objective-C 风格所独有的,还是一般 C 语言所共有的?为什么偏离(我一直认为的最佳实践)K_MY_CONSTANT 风格?
谢谢。
之前在 SO 问题中提到过一次,Cocoa 中的小写“k”。
它是一种通用的编程符号,并非特定于 Objective-C(即匈牙利符号),“k”代表“常量”。
如果您查看 Google 的 Objective-C 指南的Google 缓存,您会发现他们曾经将其包含在他们的样式指南中:
常量名称(#defines、enums、const 局部变量等)应以小写 k 开头,然后使用大小写混合来分隔单词,即 kInvalidHandle、kWritePerm。
虽然写起来很痛苦,但它们对于保持我们的代码可读性绝对重要。以下规则描述了您应该评论的内容和位置。但请记住:虽然注释非常重要,但最好的代码是自记录的。为类型和变量赋予合理的名称比使用晦涩的名称然后尝试通过注释来解释它们要好得多。
但它已在文档的实时版本中被删除。应该注意的是,它违反了Apple的 Cocoa 官方编码指南。
所有大写字母(如K_MY_CONSTANT
)通常表示一个宏 - 不一定是常数。宏脱颖而出通常很重要,因为它们会破坏所有命名空间。
' k
' 约定用于(但不是普遍地)用于 C/C++ 和可能其他语言中的非宏常量。我怀疑k
使用 ' ' 是因为 ' c
' 已经经常使用 - 要么表示类名(如CString
),要么表示变量是计数器。
kMyConstant 可以追溯到非常古老的 Mac 编程时代(80 年代/90 年代“非常古老”)。这是 Apple 使用的标准,许多 Mac 程序员也使用过;这取代了 MY_CONSTANT 类型的定义。
我想你正在阅读的作者在成为 NeXT/Cocoa 程序员之前是旧 Mac Toolbox 的 Mac Pascal/C 程序员。Mac 库曾经被称为“工具箱”——这是一组 API 和库,随着时间的推移变成了 Carbon。
我有时仍然使用 kMyConstant;让我的老派 Unix 程序员同事发疯。:-)
我认为使用前导“k”是因为所有语言都将其发音为硬辅音,因此它让人们想起“constant”的英语发音:-)
没有保留字以 k 开头,因此作为搜索目标更容易。
或者,从图形方面来看,作为一个引导字符,它在名称的其余部分前面提供了一个非常清晰的标志。前导“c”不太明显,可用于指示角色(例如匈牙利符号)或类(如果使用不区分大小写的语言)。
MY_CONSTANT 非常适合用于基于宏的常量。有时重要的是要知道常量是由宏定义的,例如,这意味着它基于文字,因此来自有限范围的数据类型,以及在全局范围内定义,因此(正如 Michael Burr 指出的那样out) 覆盖任何本地命名空间常量。