Зачем нужны переменные?
Как я уже говорил ранее, переменные - это всего лишь имена, которые привязаны к кускам памяти, где храняться соответствующие данные.
Чтобы было легче понимать, что происходит, представьте себе, что память - это набор коробок различных размеров. Размер коробки - это эквивалент количества бит, требуемого для хранения данного типа.
- Чтобы использовать коробку для хранения данных, необходимо присвоить ей имя. Этот процесс называется объявлением.
- В процессе объявления Вы используете слово, чтобы объяснить компьютеру какого размера коробка Вам нужна. Это слово называется ключевым.
- Лучше дать имя коробке такое, чтобы потом было легко понять, что в ней лежит.
- Данные кладутся в коробку путём присвоения данных коробке.
- Если объявление и присвоение данных происходит в одной строчке, то такой процесс называется инициализацией.
Например, если мы дадим компьютеру следующую строчку кода:
Код:
int MyVaraible=0;
В этом примере:
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;
Инициализация (присвоение)
Предупреждение: я писал, что инициализация - это присвоение значения переменной в строчке её объявления. Далее заменим слово "присвоение" словом "инициализация" для удобства.
Итак, инициализация означает присвоение значения переменной, например: 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);
}
2 - Глобальная зона видимости
Глобальные переменные - это переменные, объявленные вне всех фигурных скобок. Они видны и могут быть использованы в любой части Вашей программы.
Например:
Код:
int Global_Variable;
double my_func (double a, double b, double c)
{
return (a*b + c + 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-переменной