我应该把我的常数大都化吗?

时间:2008-11-19 22:23:53

标签: language-agnostic coding-style constants

你们觉得怎么样?常量应该大写吗?或者这是一个古老的做法?所以......

const int MY_CONSTANT = 5;

VS。

const int myConstant = 5;

13 个答案:

答案 0 :(得分:12)

您应该执行您正在使用的语言/平台的约定。例如,在.NET中常量应该是pascal cased,例如

SomeConstant

在其他语言中可能会有所不同。

答案 1 :(得分:6)

all-caps会议是为宏发明的,那里有充分的理由大喊:“注意!一个宏!” (有很多方法可以搞砸。)一个语言级别的常数是一个驯服的野兽,但公约仍然存在。

用你的判断;那里有一个强大的惯例,就像我在Java世界中所想的那样,打击它是浪费精力。

答案 2 :(得分:5)

Effective Java建议对 immutable static final值使用大写和下划线。否则,它们不是恒定的。

即。

public static final String  ID_FOO_BAR = "org.acme.foo.bar";
public static final List<String> sList = new List<String>();
public static final List<String> LIST = Collections.unmodifiableList(sList); 
public static final String[] sArray = new String[] {"foo", "bar", "baz" }; // FindBugs complains, if this is public.
public static final List<String> ARRAY = Arrays.asList(sArray);

这是引用:

  

按照惯例,这些字段的名称由大写字母组成,单词由下划线分隔。这些字段包含原始值或对不可变对象的引用至关重要。

...否则,如果可变对象看起来像常量,他们会因此而感到困惑。

答案 3 :(得分:3)

至少在C ++中,你应该避免使用常量来避免与规范大写的#defines混淆。

答案 4 :(得分:2)

实际上,这可能与语言无关。有些语言有使用大写字母的传统,而有些则没有。例如,在C ++中,大写通常用于枚举和仅定义,而Java则更宽松地使用大写。

答案 5 :(得分:2)

个人感觉是命名约定应该意味着什么,并且只要它们提供意义就是好的。除此之外,最好的方法是遵循您正在使用的语言的惯例。否则,您将(轻度)混淆而不是简化读者。例如,在java

THIS_CONSTANT 

是编写静态韵母的常用方法。其他语言有不同的风格。

答案 6 :(得分:2)

我没有把我的常数大写。事实上,我主动使用'const',因此将它们大写是没有意义的。例如:

const size_t size = v.size();
for( size_t i = 0; i < size; ++i ) ...

'const'的这种用法可能看起来毫无用处,但它让人相信'size'是该时间点矢量大小的快照。编译器将确保整个范围都是如此。

但是,我确实把我的MACROS大写了。但是,使用#define声明常量是一个不同的主题。

答案 7 :(得分:1)

如果您要添加或维护现有代码库,请执行他们的操作以避免让人感到困惑。如果这是一个新项目,请与您的团队达成一项约定并做到这一点。

如果这是你自己的项目,那就去做你习惯的事了。

答案 8 :(得分:1)

IDesign C# coding standard建议常量使用Pascal。

另外,请查看此related question

答案 9 :(得分:0)

这是在Java语言中命名常量的官方和事实上的标准,所以除非你认为Java是一种古老的语言,我想答案是否定的。

答案 10 :(得分:0)

用什么语言?

不,但你应该将它们放在一个类或命名空间中。

答案 11 :(得分:0)

我将.Net,Java和PHP的下划线用于大写并使用下划线。

答案 12 :(得分:0)

我更喜欢常数是全部大写,除非有理由不这样做。