【发布时间】:2010-10-04 17:49:21
【问题描述】:
我正在自学Objective-C,我在很多书籍和示例中注意到在常量定义中使用'k'和camel-casing,例如
#define kMyConstant 0
“k”的含义是什么? 这是 Objective-C 风格所独有的,还是一般 C 语言所共有的? 为什么偏离(我一直认为的最佳实践)K_MY_CONSTANT 风格?
谢谢。
【问题讨论】:
标签: objective-c constants
我正在自学Objective-C,我在很多书籍和示例中注意到在常量定义中使用'k'和camel-casing,例如
#define kMyConstant 0
“k”的含义是什么? 这是 Objective-C 风格所独有的,还是一般 C 语言所共有的? 为什么偏离(我一直认为的最佳实践)K_MY_CONSTANT 风格?
谢谢。
【问题讨论】:
标签: objective-c constants
之前在 SO 问题中提到过一次,Lower case "k" in Cocoa。
这是一种通用的编程符号 不特定于 Objective-C(即 匈牙利符号),“k”代表“常数”。
如果您查看 Google 的 Objective-C 指南Google cache,您会发现他们曾经将其包含在样式指南中:
常量名称(#defines、enums、const 局部变量等)应以小写 k 开头,然后使用混合大小写来分隔单词,即 kInvalidHandle、kWritePerm。
虽然写起来很痛苦,但它们对于保持代码的可读性至关重要。以下规则描述了您应该评论的内容和位置。但请记住:虽然 cmets 非常重要,但最好的代码是自记录的。给类型和变量起合理的名字比使用晦涩的名字然后试图通过 cmets 解释它们要好得多。
但它已在文档的live version 中被删除。需要注意的是,它违背了苹果的Official Coding Guidlines for 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) 覆盖任何本地命名空间常量。
【讨论】: