Зачем нужны переменные?
Как я уже говорил ранее, переменные – это всего лишь имена, которые привязаны к кускам памяти, где хранятся соответствующие данные.
Чтобы было легче понимать, что происходит, представьте себе, что память – это набор коробок различных размеров. Размер коробки – это эквивалент количества бит, требуемого для хранения данного типа.
- Чтобы использовать коробку для хранения данных, необходимо присвоить ей имя. Этот процесс называется объявлением.
- В процессе объявления Вы используете слово, чтобы объяснить компьютеру какого размера коробка Вам нужна. Это слово называется ключевым.
- Лучше дать имя коробке такое, чтобы потом было легко понять, что в ней лежит.
- Данные кладутся в коробку путём присвоения данных коробке.
- Если объявление и присвоение данных происходит в одной строчке, то такой процесс называется инициализацией.
Когда мы создаём переменную, мы говорим компьютеру, что мы хотим, чтобы он присвоил часть памяти определённого размера (в битах) нашей переменной. Поскольку хранение числа, буквы или большого числа занимает разный объём памяти, компьютер спросит, что Вы хотите хранить в этой памяти, и каков размер данных. Для этого и нужны типы данных.
Например, если мы дадим компьютеру следующую строчку кода:
int MyVaraible=0;
то мы говорим компьютеру, что хотим, чтобы он выделил блок памяти длиной 4 байта под нащу переменную “MyVariable”.
В этом примере:
int – это ключевое слово
int – тип данных integer
int – объявление
MyVariable – имя переменной
=0 – инициализация
О переменных мы узнаем больше в следующих уроках.
В MQL4 присутствуют следующие типы данных:
- Integer (int)
- Boolean (bool)
- Character (Char)
- String (String)
- Floating-point number (double)
- Color (color)
- Datetime (datetime)
Я скопировал для Вас предыдущие строки из урока про типы данных. Теперь Вы вспомнили, что такое переменные – давайте посмотрим, как их надо объявлять:
Объявление:
Объявить переменную означает представить её миру и указать её тип. Для этого используются ключевые слова, которые мы прошли в уроке про типы данных (int, double, char, bool, string, color и datetime) и имя, которое Вы выбрали для своей переменной.
Например:
int MyVaraible;
Здесь Вы объявили переменную под именем MyVariable, которая имеет тип integer. До строчки объявления ‘слово’ MyVariable в коде использовать нельзя. Если Вы попробуете это сделать, то компилятор MQL4 будет жаловаться и выдаст такую ощибку: ‘MyVaraible’ – variable not defined. 1 error(s), 0 warning(s).
Инициализация (присвоение)
Предупреждение: я писал, что инициализация – это присвоение значения переменной в строчке её объявления. Далее заменим слово “присвоение” словом “инициализация” для удобства.
Итак, инициализация означает присвоение значения переменной, например: MyVaraible=0; Инициализацию можно производить в той же строчке, что и объявление: int MyVariable=0;
А можно объявить переменную в одном месте, а инициализацию производить совершенно в другом:
int MyVaraible;
…
…
MyVaraible=5;
Но помните, что объявление всегда идёт ДО инициализации.
Зоны видимости переменных
Есть два типа зон видимости переменной – локальная и глобальная.
1 – Локальная зона видимости
Локальные переменные не видны вне того мира, где они были объявлены. Границы ‘мира’ определяются ближайшей парой фигурных скобок {}. Сверху мир ограничен скобкой {, а снизу – скобкой }. Например, переменные, объявленные внутри функции, локальны для тела этой функции. Переменные, объявленные внутри цикла или условия локальны для этого цикла или условия, и они НЕ видны и НЕ могут быть использованы вне этого цикла или условия.
Например:
double my_func (double a, double b, double c)
{
int d;
return (a*b + c);
}
В приведённом примере переменные a,b,c и d являются локальными и могут быть использованы только внутри тела этой функции.
2 – Глобальная зона видимости
Глобальные переменные - это переменные, объявленные вне всех фигурных скобок. Они видны и могут быть использованы в любой части Вашей программы.
Например:
int Global_Variable;
double my_func (double a, double b, double c)
{
return (a*b + c + Global_Variable);
}
Здесь глобальная переменная Global_Variable объявлена вне функции (на уровне объявления функций), поэтому она видна всем функциям Вашей программы.
Глобальные переменные автоматически выставляются на нуль, если Вы их не проинициализировали при объявлении.
Внешние переменные
Ключевое слово “extern” используется для объявления переменных специального вида (не типа, а вида). Переменные такого вида используются для хранения входных данных программы, которые Вы можете ввести в окошке настроек Вашего советника или индикатора.
Например:
extern color Indicator_color = C'0x00,0x00,0xFF'; // blue
int init()
{
...
}
В этом примере переменная Indicator_color была объявлена, как extern, которую Вы увидите, когда прикрепите свой индикатор к графику в терминале, и которую можно менять в окошке настроек.
Рис. 1. Окошко настроек индикатора MA.
Здесь переменные Period, Shift, MA_method, Apply_to и Style - переменные, объявленные с использованием ключевого слова “extern“. Поэтому они появляются в окошке настроек.
Если Вы хотите, чтобы пользователь мог изменять какую-либо переменную, сделайте её extern-переменной.
|