Я знаю, что для С++ и Java это хорошо установленное соглашение об именах, что константы должны быть записаны в верхнем регистре, с подчеркиваниями для разделения слов. Как это (пример Java):
public final static Color BACKGROUND_COLOR = Color.WHITE;
public final static Color TEXT_COLOR = Color.BLACK;
Это соглашение об именах легко понять и следовать, но я спрашиваю себя: зачем выбирать это соглашение об именах для обычного соглашения об именах для переменных:
public final static Color backgroundColor = COLOR.WHITE;
public final static Color textColor = COLOR.BLACK;
Кажется, что нет необходимости менять внешний вид констант. Если мы хотим присвоить им значение, компилятор так или иначе предотвратит это. На самом деле это создает проблемы, если позже константа будет изменена на правильную переменную (потому что цвета могут быть сконфигурированы, например).
Итак, какова конечная причина для написания названных констант в верхнем регистре? Исторические причины?