【问题标题】:What is the significance of starting constants with 'k'?以“k”开头的常数有什么意义?
【发布时间】:2010-10-04 17:49:21
【问题描述】:

我正在自学Objective-C,我在很多书籍和示例中注意到在常量定义中使用'k'和camel-casing,例如

#define kMyConstant 0

“k”的含义是什么? 这是 Objective-C 风格所独有的,还是一般 C 语言所共有的? 为什么偏离(我一直认为的最佳实践)K_MY_CONSTANT 风格?

谢谢。

【问题讨论】:

    标签: objective-c constants


    【解决方案1】:

    之前在 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

    【讨论】:

    • 非常有趣。 “一般来说,不要使用 #define 预处理器命令来创建常量。对于整数常量,使用枚举,对于浮点常量,使用 const 限定符,如上所述。”谢谢!
    • PS,对于重复的问题很抱歉。我发誓我先搜索了! ;)
    • @TypeOneError,我没有提到它是为了指出一个重复的问题。我不一定认为这是对那个确切问题的重复。我只是将您指向另一个要阅读的资源。你的问题有点宽泛,可能更好。
    • 注意:Google 的 live 版本仍然说使用 k 作为常量(在变量名\常量下)
    【解决方案2】:

    所有大写字母(如K_MY_CONSTANT)通常表示宏 - 不一定是常量。让宏脱颖而出通常很重要,因为它们会破坏所有命名空间。

    'k' 约定用于(但不普遍)C/C++ 和可能其他语言中的非宏常量。我怀疑使用了“k”,因为“c”已经被经常使用——要么表示类名(如CString),要么表示变量是计数器。

    【讨论】:

      【解决方案3】:

      kMyConstant 可以追溯到非常古老的 Mac 编程时代(80 年代/90 年代“非常古老”)。这是 Apple 使用的标准,许多 Mac 程序员也使用过;这取代了 MY_CONSTANT 类型的定义。

      我想您正在阅读的作者在成为 NeXT/Cocoa 程序员之前是旧 Mac Toolbox 的 Mac Pascal/C 程序员。 Mac 库过去被称为“工具箱”——这是一组 API 和库,随着时间的推移变成了 Carbon。

      我有时仍然使用 kMyConstant;让我的老派 Unix 程序员同事发疯。 :-)

      【讨论】:

        【解决方案4】:

        我认为使用前导“k”是因为所有语言都将其发音为硬辅音,因此它让人们想起“constant”的英语发音:-)

        没有以k开头的保留字,因此作为搜索目标更容易。

        另外,从图形方面来看,作为主角,它在名称的其余部分前面提供了一个非常清晰的标志。前导“c”不太明显,可用于指示角色(例如匈牙利符号)或类(如果使用不区分大小写的语言)。

        MY_CONSTANT 非常适合用于基于宏的常量。有时重要的是要知道常量是由宏定义的,例如,这意味着它基于文字,因此来自有限范围的数据类型,以及在全局范围内定义,因此(正如 Michael Burr 指出的那样out) 覆盖任何本地命名空间常量。

        【讨论】:

          猜你喜欢
          • 2010-11-16
          • 2014-05-17
          • 1970-01-01
          • 2010-12-02
          • 1970-01-01
          • 1970-01-01
          • 2010-10-07
          • 2012-06-28
          • 1970-01-01
          相关资源
          最近更新 更多