Самообучение языку MQL5 с полного нуля - страница 44

 
Vladimir Simakov:

Глобальные объекты, инициализируются конструктором по умолчанию. Для примитивных (в нашем случае все, кроме string) типов - это 0. А вот для памяти (читай переменных), выделенной на стеке, инициализация не производится. Поэтому, глобальные переменные можно не инициализировать, помним, что в этом случае они будут равны нулю. А вот отсутствие инициализации (заодно, сразу приучайтесь не допускать предупреждений компилятора, если, конечно, четко не знаете, что делаете) - это уже серьезнее, так как чтение не инициализированной переменной приводит к неопределенному поведению. Например, этот код по разному себя ведет в релизной и дебаг сборке и никто не даст гарантии, что при смене версии компилятора или настроек оптимизации не изменится и его поведение:

Здравствуйте, Владимир! Спасибо за разъяснение.

С уважением, Владимир.

 
MrBrooklin:

Петер, а вот по поводу глобальных переменных пока не нашёл в литературе, что глобальные переменные нужно заранее предопределять. У вас есть ссылка на источник, чтобы повысить свои знания в этом вопросе? В Справочнике MQL5 нет явного указания про инициализацию, вот выдержка из него:

Тип bool предназначен для хранения логических значений true (истина) или false (ложь), числовое представление которых 1 или 0 соответственно.

Примеры:

bool a = true;
bool b = false;
bool c = 1;

Внутреннее представление – целое число размером 1 байт. Необходимо отметить, что в логических выражениях допустимо использовать вместо типа bool другие целые или вещественные типы или выражения этих типов, компилятор не выдаст ошибки. В таком случае значение ноль будет интерпретировано как false, а все остальные значения как true.

С уважением, Владимир.
Желательно явно инициализировать глоб.переменные, хотя бы для выработки привычки это делать. Повторю, в mql4 можно вообще не инициализировать переменные и массивы в функциях, а в mql5 это уже обязательно, иначе в переменных будет "мусор".
 

Дописал в коде скрипта:

//--- Зададим глобальные переменные:
//переменная enough_time (достаточно времени), где bool - логическое значение: истина (true) или ложь (false)
bool enough_time=false;
//переменная enough_patience (достаточно терпения), где bool - логическое значение: истина (true) или ложь (false)
bool enough_patience=false;

Теперь нужно в комментариях скрипта, как-то четко прописать для ученика 1-го класса школы программирования, почему предопределённое значение для типа данных bool должно быть именно false, а не true.

С уважением, Владимир.

 
MrBrooklin:

Дописал в коде скрипта:

С уважением, Владимир.

Больше мне придраться не к чему. :)
 
MrBrooklin:

Продолжаю изучение языка программирования MQL5 и выкладываю код скрипта, который является продолжением выполнения одного задания со стороны участников данной темы. Скрипт проверил на всех режимах. Проблемы не выявлены. Для начала применил минимальное количество входных параметров. Код скрипта написан на английском языке, а комментарии к коду на русском языке, чтобы облегчить усвоение материала. В данном скрипте постарался всё расписать, как ранее и обещал, в изложении доступном для ученика 1-го класса школы программирования.

С уважением, Владимир.

Владимир, так писать нельзя. Не замыкайте работу функций на внешних переменных. Единственное исключение пока для Вас, это взятие значений из input переменных.
 
Vasiliy Sokolov:
Владимир, так писать нельзя. Не замыкайте работу функций на внешних переменных. Единственное исключение пока для Вас, это взятие значений из input переменных.

Здравствуйте, Василий! Честно говоря, не совсем понял смысл того, что выделено жирным шрифтом. Прошу, пожалуйста, объясните подробнее, что Вы хотели этим сказать.

С уважением, Владимир.

 
MrBrooklin:

Здравствуйте, Василий! Честно говоря, не совсем понял смысл того написанного, что выделено жирным шрифтом. Прошу, пожалуйста, объясните подробнее, что Вы хотели этим сказать.

С уважением, Владимир.

Не используйте глобальные переменные. Почему их нельзя использовать я напишу позже.
 
Vasiliy Sokolov:
Не используйте глобальные переменные. Почему их нельзя использовать я напишу позже.

Есть хороший анекдот на эту тему:

- Вопрос: какой самый оптимальный тип для глобальной переменной в с++?

- Ответ: //

 
Vasiliy Sokolov:
Не используйте глобальные переменные. Почему их нельзя использовать я напишу позже.

Теперь понятно. Спасибо, буду ждать от Вас ответа, почему нельзя использовать глобальные переменные.

С уважением, Владимир.

 
На данном этапе, вплоть до перехода на ООП-программирование, использование глоб.переменных полностью оправдано и нет причин от него отворачиваться. Они удобны и легки в использовании в любом месте программы. С чего бы от них отказываться? Имхо. 
Причина обращения: