Именование: Почему именованные константы должны быть всем верхним регистром в C++ / Java?

  • Используйте глобальный флаг g после регулярного выражения.
  • ( и ) являются специальными символами, поэтому их нужно экранировать.
  • Используйте оператор | для сопоставления с любой из найденных строк
  • Если вы ищете только символы, вы можете вместо этого использовать класс символов, например: [(),]

Пример полная строка:

function fixString(text){
 return text.replace(/\(|\)|,/g, " ");
}

console.log(fixString(",1)2(3"));

Пример соответствия символов:

function fixString(text){
 return text.replace(/[(),]/g, " ");
}

console.log(fixString(",1)2(3"));

33
задан lothar 8 May 2009 в 16:47
поделиться

10 ответов

I think it is not a technical problem but rather a psychological one. Naming conventions are not for the compiler to process (the computer does not really mind names) but rather for the programmer that is browsing the code to have as much information as possible with as little effort as required.

Using a different naming convention is clearly telling the reader that what you are reading is something that is FIXED at compile time and you don't need to follow through code to determine where and how the value got there.

31
ответ дан 27 November 2019 в 17:37
поделиться

When programming, it is important to create code that is understandable by humans. Having naming conventions helps to do this. This is best when looking at code that you didn't write and makes the code more maintainable because it is easy to distinguish from constants and variables.

0
ответ дан 27 November 2019 в 17:37
поделиться

Возможно, вы правы. Компьютеры и компиляторы (особенно) были не такими быстрыми, как сегодня.

Джоэл Спольски упомянул в одно из своих очерков , как он был впечатлен временем компиляции новой версии Turbo Pascal.

Я помню, когда Компиляция не слишком большой программы (10-20KLOC) с оверлеями в Turbo Pascal 5.0 на ПК XT 10 МГц заняла около 20 минут ...

Я полагаю, что ожидание компиляции для обнаружения ошибки не было приемлемым.

это помогает избежать ошибок и потерянного времени при неправильной компиляции.

1
ответ дан 27 November 2019 в 17:37
поделиться

It's a workaround for your development tools not being able to spot the properties of an identifier in a convenient way.

Much like Hungarian notation.

When your IDE gets better, you won't need any naming convention but the one that dictates that a name is comprehensive information on what an identifier means.

Even that may evolve: why not create a programming system where you just create identifiers, and add properties to it like "brief description", "type", ... When the tool arrives that can do this in a convenient way, I'm in. "Intentional Programming" is a hint.

2
ответ дан 27 November 2019 в 17:37
поделиться

I believe in C++ it's a convention carried over from the days of using the preprocessor to #define constant values. Back then, it was done to avoid having the preprocessor trample all over your source code, as the usual conventions for C function and variable names would make them mixed case or lower case.

From a C++ point of view, I would say that it's a bad idea to make your constants all-uppercase. I've had to debug more than one build problem because of this - remember that the C++ preprocessor does know nothing about namespaces and naming scope and will happily substitute what it thinks is appropriate even though it is rather inappropriate.

12
ответ дан 27 November 2019 в 17:37
поделиться

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

typedef unsigned int Color;
#define BACKGROUND_COLOR 0xffffff

Такие «константы» являются просто предопределенными литералами, и как такие они ведут себя не совсем как переменные. Вы не можете, например, взять адрес такой «константы»:

Color *p = &BACKGROUND_COLOR; // Breaks!

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

16
ответ дан 27 November 2019 в 17:37
поделиться

Если я знаю, что что-то является константой, я могу ссылаться на нее несколько раз и знать, что это не изменится. Другими словами, я знаю, что:

Color black = Colors.BLACK;
foo(black);
foo(black);

- это то же самое, что и

foo(Colors.BLACK);
foo(Colors.BLACK);

. Иногда это полезно знать. Лично я предпочитаю соглашение об именах .NET, которое заключается в использовании регистра Pascal для констант (и методов):

Foo(Colors.Black);
Foo(Colors.Black);

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

17
ответ дан 27 November 2019 в 17:37
поделиться

With uppercase constants long formulas are much easier to read, you don't have to guess which element can vary and which can not. It's of course only a convention, but helpful one.

2
ответ дан 27 November 2019 в 17:37
поделиться

Coding conversions are to improve readability. You don't have to use letters. Java allows $ symbol for example.

public final static Color $$ = COLOR.WHITE;
public final static Color $_ = COLOR.BLACK;

You could number your variables too, but that doesn't mean its a good idea. ;)

0
ответ дан 27 November 2019 в 17:37
поделиться

Я думаю, что константы в верхнем регистре - это плохое наследие языка C. Логика здесь та же, что и при использовании подчеркивания в качестве префикса для закрытых членов. Это технические вещи, которые уже выражены ключевыми словами Java, такими как private или, в случае с константами, static final.

4
ответ дан 27 November 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: