2008-11-19 7 views

ответ

2

В C++, по крайней мере, вы должны избегать спекулируя констант, чтобы избежать путаницы с #defines, которые канонически капитализируются.

0

Это официальный стандарт де-факто для констант именования языка Java, поэтому, если вы не считаете Java архаичным языком, я думаю, что ответ отрицательный.

+0

Так как Java взяла что-то из C/C++ более десяти лет назад, это значит, что нам нужно продолжить практику? – 2008-11-19 22:31:35

+0

Я не предлагал вам продолжать практику, я просто указал, что это соглашение все еще широко используется и поэтому не может считаться тайным. – 2008-11-19 22:55:17

12

Вы должны сделать то, что конвенция на языке/платформе, которую вы используете. Например, в .NET-константах должна быть установлена ​​паскаль, например.

SomeConstant 

В других языках это, вероятно, будет отличаться.

0

Какой язык?

Нет, но вы должны поместить их в класс или пространство имен.

1

Если вы добавляете или поддерживаете существующую базу кода, делайте то, что они делают, чтобы не путать людей. Если это новый проект, соглашайтесь с соглашением с вашей командой и делайте это.

Если это ваш собственный проект, сделайте то, к чему вы привыкли.

2

Собственно, это не может быть языковым агностиком. Некоторые языки имеют традицию использования столиц, а другие - нет. Например, в C++ верхний регистр обычно используется для перечислений и определяет только, в то время как Java использует прописные буквы более либерально.

2

Личностное чувство состоит в том, что соглашения об именах должны означать что-то и хороши, пока они обеспечивают смысл. Помимо этого лучше всего следовать правилам языка, на котором вы работаете. В противном случае вместо упрощения для читателя вы (слегка) запутываете. Например, в java

THIS_CONSTANT 

является распространенным способом записи статических финалов. Другие языки имеют разные стили.

1

Я не использую свои константы. Фактически, я использую «const» так активно, что нет смысла их использовать. Например:

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

Это использование «сопзЬ» может показаться бесполезным, но это дает уверенность в том, что «размер» является снимок размером этого вектора в этот момент времени. Компилятор будет убедиться, что это верно для всей области.

Я, однако, капитализирую свои MACROS. Но использование #define для объявления констант - это другая тема.

0

Я использую символы подчеркивания для .Net, Java и PHP.

0

Я предпочитаю, чтобы константы были все шапки, если нет причин не делать этого.

4

Соглашение о всех шапках было изобретено для макросов, где были веские основания кричать: «Осторожно! Макро!». (Существует множество способов испортить.) Константа языкового уровня - укротитель, но соглашение сохранилось.

Использовать ваше мнение; где есть сильная конвенция, как я полагаю, в мире Java, это пустая трата энергии для борьбы с ней.

5

Эффективная Java рекомендует вам столицы и символы подчеркивания для 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); 

Вот цитата:

По соглашению, такие поля имеют имена, состоящие из прописных букв, со словами, разделенными подчеркиванием. Крайне важно, чтобы эти поля содержали либо примитивные значения, либо ссылки на неизменяемые объекты.

... в противном случае, если изменяемые объекты выглядят как константы, они путаются как таковые.

Смежные вопросы