Должен ли я использовать мои константы с заглавной буквы? - PullRequest
8 голосов
/ 20 ноября 2008

Что вы, ребята, думаете? Должны ли константы быть заглавными? Или это архаичная практика? Итак ...

const int MY_CONSTANT = 5;

против.

const int myConstant = 5;

Ответы [ 13 ]

12 голосов
/ 20 ноября 2008

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

SomeConstant

На других языках оно может быть другим.

6 голосов
/ 20 ноября 2008

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

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

5 голосов
/ 20 ноября 2008

Эффективная 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);

Вот цитата:

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

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

3 голосов
/ 20 ноября 2008

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

2 голосов
/ 20 ноября 2008

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

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

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

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

2 голосов
/ 20 ноября 2008

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

THIS_CONSTANT 

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

2 голосов
/ 20 ноября 2008

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

1 голос
/ 20 ноября 2008

Стандарт кодирования IDesign C # рекомендует регистр Pascal для констант.

Также, проверьте этот связанный вопрос .

1 голос
/ 20 ноября 2008

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

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

0 голосов
/ 20 ноября 2008

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

...