Переменные-константы

Каким бы оксюмороном это ни звучало, большинство языков программирования поддерживает концепцию переменных-констант. В MQL5 они описываются путем добавления модификатора const. Он ставится в описании переменной, перед её типом, и означает, что значение переменной нельзя никаким образом изменить после её инициализации начальным значением. Всё своё время существования переменная будет иметь одно и то же значение — константу.

Компилятор просто не даст присвоить константе какое-либо значение: в соответствующей строке появится ошибка "константа не может модифицироваться" ("constant cannot be modified").

Смысл модификатора const в том, чтобы явно указать намерение программиста не менять соответствующую переменную, если в ней хранится некая общеизвестная постоянная величина, такая как коэффициент евро для расчета индекса доллара, количество недель в году и т.д. Рекомендуется всегда применять модификатор const, если переменную не предполагается менять. Это помогает избежать в дальнейшем потенциальных ошибок, если сам программист или кто-то из его коллег случайно попытается записать в константу что-то другое.  

Например, мы можем добавить модификатор const для массива messages в функции Greeting. Это не кажется очевидно полезным для столь малой программы. Но поскольку программы имеют тенденцию разрастаться, любая строка рано или поздно может оказаться в гораздо более сложном программном окружении (добавленные инструкции, режимы работы и т.д.). Поэтому имеет смысл заранее подстраховаться, тем более что это так просто.

string Greeting()
{
  static int counter = 0;
  static const string messages[3] =
  {
    "Good morning""Good day""Good evening"
  };
  // error demo: 'messages' - constant cannot be modified
  // messages[0] = "Good night";
  return messages[counter++ % 3];
}

В закомментированной строке тестируется запись строки "Good night" в первый элемент массива (напомним, нумерация идет с 0). В данном случае смысл такого действия — исключительно саботажный: убедиться, что компилятор не даст это сделать.

Легко заметить, что модификаторы static и const можно комбинировать. Порядок их записи не важен.

Кстати говоря, в MQL5 переменные становятся константами не только при помощи модификатора const, но и при объявлении их входными переменными программы.