如何在Objective-C中命名常量?

41

Objective-C中常量的命名规范是什么(或者最广泛使用的命名方式是什么)?

extern常量是否有不同的标准?

我见过的一些风格:

NSString* const kPreferenceFirstRun = @"FirstRun";

// Replace "XY" by a prefix representing your company, project or module
NSString* const XYPreferenceFirstRun = @"FirstRun"; 
2个回答

41

经过一番搜索,我找到了Cocoa的官方编码指南

总结一下:

  • 以两个或三个大写字母的前缀开头
  • 其余为UpperCamelCase格式
  • extern常量也遵循同样的标准

我同意itaiferber的看法,认为使用k前缀风格更清晰,对于自动完成也更有用。有趣的是,这种风格是否比官方指南更受欢迎。


1
我认为使用两个字母前缀与k前缀相比有双重好处:1)两个字母前缀可以让您轻松过滤自动完成选项,只显示您要查找的常量组;2)在查看代码时,您可以准确地知道常量来自哪个域。想象一下,如果您正在处理在Xcode中使用多个兄弟项目的项目,并且它们都使用k作为常量的唯一标识符-您将被困在所有兄弟项目的所有常量列表中。或者,如果每个项目都使用自己的两个字母域前缀,那么就会变得更加容易。 - memmons
非常有趣的观点,也是非常有趣的答案。在每个头文件(MyClass.h)中声明常量是否更好,还是在全局.h文件(Constants.h或类似文件)中专门包含常量声明更好?我在许多C/C++项目中看到了这种做法,那么为什么不在objC中使用呢? - voghDev
值得注意的是,许多苹果库都使用kPrefixConstantNamingConvention。因此,选择其中之一大多取决于个人喜好。我通常使用kPrefix,但我也倾向于避免全局常量,因此对这些常量进行命名空间处理变得不那么重要。 - Erik B

5

在我看来,最佳实践是将常量命名为大写字母。但是Cocoa核心开发人员似乎不同意我的观点))他们使用CamelCase来命名常量。


44
也许Cocoa核心开发者不喜欢他们的代码对他们大喊大叫。 - dreamlax
3
在C语言中使用全大写的技巧是为了使宏(而不是常量,宏)更加突出。由于在C语言中,宏是一个非常危险的结构,这种技巧非常有用,因为它可以吸引注意力到可能出现问题的地方。不幸的是,在其他语言中,这种惯例被误导性地复制了,而这些语言本身已经有了完善的常量定义机制。 - Ferruccio
k 很容易识别,正如 @hgpc 所提到的,它非常适合自动完成。预处理器宏使用全大写字母,因此可能更适合仅用于那个。 - jpswain
7
在 obj-c 中使用所有大写常量并不是一个好主意,因为这通常是保留给 #defines 的。 - memmons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接