Русский

Справочник MQL4 Основы языка Переменные

Переменные

Объявление переменных

Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором.

Простыми типами являются:

  • char, short, int, long, uchar, ushort, uint, ulong – целые числа;
  • color – целое число, представляющее RGB-цвет;
  • datetime – дата и время, беззнаковое целое число, содержащее количество секунд, прошедших с 0 часов 1 января 1970 года;
  • bool – логические значения true и false;
  • double – числа двойной точности с плавающей точкой;
  • float – числа одинарной точности с плавающей точкой;
  • string – символьные строки.

Примеры:

string szInfoBox;
int    nOrders;
double dSymbolPrice;
bool   bLog;
datetime tBegin_Data   = D'2004.01.01 00:00';
color    cModify_Color = C'0x44,0xB9,0xE6';

 

Сложные или составные типы:

Структуры – это составные типы данных, построенные с использованием других типов.

struct MyTime
  {
   int hour;    // 0-23
   int minute;  // 0-59
   int second;  // 0-59
  };
...
MyTime strTime; // переменная типа объявленной ранее структуры MyTime

До тех пор пока структура не объявлена, нельзя объявлять переменные типа структуры.

Массивы

Массив - это индексированная совокупность однотипных данных:

int    a[50];       // Одномерный массив из 50 целых чисел.
double m[7][50];    // Двухмерный массив из семи массивов,
                    // каждый из которых состоит из 50 чисел.
MyTime t[100];      // массив содержащий элементы типа MyTime

 

Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива начинается с 0. Последний элемент одномерного массива имеет номер на 1 меньший, чем размер массива, то есть обращение к последнему элементу массива из 50 целых чисел будет выглядеть как a[49]. То же самое относится и к многомерным массивам – индексация одного измерения производится от 0 до размер измерения-1. Последний элемент двумерного массива из примера будет выглядеть как m[6][49].

Статические массивы не могут быть представлены в виде таймсерий, то есть к ним не применима функция ArraySetAsSeries(), которая устанавливает доступ к элементам массива от конца массива к его началу. Если требуется обеспечить доступ к массиву как в таймсериях, используйте объект динамического массива.

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

Спецификаторы доступа

Спецификаторы доступа указывают компилятору каким образом можно осуществлять доступ к переменным, членам структур или классов.

Спецификатор const объявляет переменную константой, и не позволяет изменять значение этой переменной в процессе выполнения программы. Допускается однократная инициализация переменной при ее объявлении.

Пример

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime &time[],     // Time
                 const double &open[],       // Open
                 const double &high[],       // High
                 const double &low[],        // Low
                 const double &close[],      // Close
                 const long &tick_volume[],  // Tick Volume
                 const long &volume[],       // Real Volume
                 const int &spread[]         // Spread
   );

Для доступа к членам структур и классов используются следующие спецификаторы:

  • public – разрешает ничем неограниченный доступ к переменной или методу класса;
  • protected – разрешает доступ со стороны методов данного класса, а также со стороны методов публично наследуемых классов. Иной доступ невозможен;
  • private – разрешает доступ к переменным и методам класса только из методов данного класса.
  • virtual – применим только к методам класса (но не к методам структур) и сообщает компилятору, что данный метод должен быть размещен в таблице виртуальных функций класса.

Классы памяти

Существуют три класса памяти: static, input и extern. Эти модификаторы класса памяти явно указывают компилятору, что соответствующие переменные распределяются в предопределенной области памяти, называемой глобальным пулом. При этом данные модификаторы указывают на особую обработку данных переменных.

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

Смотри также

Типы данных, Инкапсуляция и расширяемость типов, Инициализация переменных, Область видимости и время жизни переменных, Создание и уничтожение объектов, Статические члены класса