МТ5 удивляет. А он работает с логическими выражениями? - страница 3

 
Konstantin83:

Говорили мне что глобальные переменные нужно использовать осторожно...

в функции GetNewX2  объявил локальную переменную х2 (и есть глобальная переменная х2) в итоге наверно и получал неоределенность со сравнением

Надо быть внимательнее) 

МТ 5 интересен, но пока тяжко во всем разобраться, вроде переделал мультивалютник с МТ4 на МТ5 


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

например код:

//+------------------------------------------------------------------+
//|                                                        hides.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

int x;

void func(double x)
  {
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int i,j,z,x;
      
   for(int i=0;i<x;i++)
      for(int j=0;j<x;j++)
         Print(i*z);
  }
//+------------------------------------------------------------------+

при его компиляции выдаются предупреждения:

declaration of 'x' hides global declaration at line 10   1.mq5    12    18
declaration of 'x' hides global declaration at line 10   1.mq5    21    14
declaration of 'i' hides local declaration at line 21    1.mq5    23    12
declaration of 'j' hides local declaration at line 21    1.mq5    24    15
variable 'i' is not used                                 1.mq5    21    8
variable 'j' is not used                                 1.mq5    21    10
uninitialized variable 'x' is used                       1.mq5    23    18
uninitialized variable 'z' is used                       1.mq5    25    18


 

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

Глобальные с большой буквы, локальные с маленькой -- все.

 
TheXpert:

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

Глобальные с большой буквы, локальные с маленькой -- все.

А еще проще давать осмысленные названия переменным :)
Я например, часто использую приставку "tmp" для временных переменных, которые нужны для расчетов, и удалятся после выхода из функции/метода.
 
Модераторам -- я дал нормальный совет, он его испохабил. За что пост удалили то?
 
TheXpert:
Модераторам -- я дал нормальный совет, он его испохабил. За что пост удалили то?

Я то испохабил?

С вас корона не спадывает? Почитайте любые книги по программированию на любых языках, везде написано именно "Давайте осмысленные названия переменным", что часто исключает проблемы с видимостью.

 
mrProF:

Я то испохабил?

Конечно.

Почитайте любые книги по программированию на любых языках, везде написано именно "Давайте осмысленные названия переменным"

Вот именно поэтому.

mrProF:

Я например, часто использую приставку "tmp" для временных переменных, которые нужны для расчетов, и удалятся после выхода из функции/метода.
А это вообще ересь. Почитайте общепринятые стандарты по именованию, раз так любите читать.
 
TheXpert:

mrProF:

Я например, часто использую приставку "tmp" для временных переменных, которые нужны для расчетов, и удалятся после выхода из функции/метода.
А это вообще ересь. Почитайте общепринятые стандарты по именованию, раз так любите читать.

Я это написал как делаю я, и это не является руководством к действию.
При чем тут стандарты? Стандартов кучи, каждый выбирает свой по удобству.
А давать переменным названия "x1" и "X1" это дурдом.

Я уже программирую лет пять, на разных языках, и проблем с перекрытием области видимости не было.
Мой совет необходимо принять в первую очередь, а Ваш следом.
А не только называть глобальные переменные с большой буквы.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
TheXpert:
Иди учись, малыш.

Ок, я даже спорить не буду, холивар того не стоит :D

P.S. Вопрос на выходные, как правильно писать: "inputParam" или "input_param"? :D

 
mrProF:

P.S. Вопрос на выходные, как правильно писать: "inputParam" или "input_param"? :D

Оба варианта нормальные, в зависимости от соглашения по именованию.

Со вторым вариантом больше мороки, т.к. в нем вообще нету заглавных буков, поэтому используется намного реже первого.

 
mrProF:

Я это написал как делаю я, и это не является руководством к действию.
При чем тут стандарты? Стандартов кучи, каждый выбирает свой по удобству.
А давать переменным названия "x1" и "X1" это дурдом.

Я уже программирую лет пять, на разных языках, и проблем с перекрытием области видимости не было.
Мой совет необходимо принять в первую очередь, а Ваш следом.
А не только называть глобальные переменные с большой буквы. 


а вы можете абстрагироваться? Смысл был мне выкладывать код? Я выложил часть проверки в формальном виде. Когда в учебнике пишутся формулы, там указываются число1(квадратный корень из 9) + число2(....)
или просто указываются иксы, игреки и другие буквы...
вот вам кусок кода, нет тут никаких иксов и тому подобное
...
//входные параметры советника
int   eTakeProfit
...
//глобальные параметры советника
int       gCurrentActiveMean;
int       gCurrentMean;
...
//функции
int               GetCurrentMean()
 {
  int       gCurrentMean;  // недосмотрел в результате несколько часов недопонимания что не так
...
 }
...
void CheckForClose()
 {
   int    SpreadMain;
   int    SpreadAlly;
 ...
if ( ((gCurrentActiveMean - gCurrentMean) >= (eTakeProfit + SpreadMain + SpreadAlly)) && gCurrentMean !=-1)
 {

 }
..
}
P.S. Переписал советник в виде класса, глобальных переменных нет, теперь это переменные класса
P.S. Время на написание советников выделяю в свободное время и не все сразу получается, а вам mrProF надо более сдержанно выражаться

Причина обращения: