Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Посмотри на Топ сигналов MetaTrader 5. Выбери лучший и подпишись!
Vasyl Nosal
18342
Vasyl Nosal 2014.04.03 07:03  
paladin80:
Не сделают как вам надо. До улучшения компилятора как раз и было так вам надо, но сейчас точно обратно не вернут. Новый способ даёт больше плюсов, чем минусов. Я бы наоборот голосовал за то, чтобы оставили так как сейчас. В вашем случае объявляйте переменную перед блоком. Другого выхода не вижу.


Я сам за то чтобы было как сейчас.

Но вот в таких слачаях не вижу смысла объявлять выше if

Александр
82
Александр 2014.04.03 07:48  
eevviill:

Вот такая ситуация. Обычно при расчётах индикаторов.

Тоесть нельзя использовать объявленные в if переменные вне действия if. if выступает как бы функцией.

Можно переделать чтобы вот в таком случае можно было объявлять в if и использовать вне if?

Проверять что в if.


А что мешает объявить переменную вне блока {...}, а присвоить значение переменной уже в блоке {...}?

Или проверку значения переменной RSI в том же блоке делать (и проверка if (UseRSI) уже сделана) ?

Типа if (UseRSI) { double RSI=iRSI(...); if (RSI>50) return; }

А если там в {...} другого кода нет, то вообще всё превращается if (UseRSI && iRSI(...)>50) return;

Оптимизатор кода проверяет условия слева направо и если UseRSI==false, то вызова iRSI() уже не присходит

(единственная адекватная причина такого упрямого цепляния за такой корявый код - съэкономить время на вызове функции)

PS: ну, или как подсказывают камрады - в начале кода убрать строчку #property strict, тогда компилятор будет работать в старом режиме (и 2 раза проверять if (UseRSI) )

Vasyl Nosal
18342
Vasyl Nosal 2014.04.03 07:50  
EverAlex:


А что мешает объявить переменную вне блока {...}, а присвоить значение переменной уже в блоке {...}?

Или проверку значения переменной RSI в том же блоке делать (и проверка if (UseRSI) уже сделана) ?

Типа if (UseRSI) { double RSI=iRSI(...); if (RSI>50) return; }

А если там в {...} другого кода нет, то вообще всё превращается if (UseRSI && iRSI(...)>50) return;

Оптимизатор кода проверяет условия слева направо и если UseRSI==false, то вызова iRSI() уже не присходит

(единственная адекватная причина такого упрямого цепляния за такой корявый код - съэкономить время на вызове функции)

PS: ну, или как подсказывают камрады - в начале кода убрать строчку #property strict, тогда компилятор будет работать в старом режиме (и 2 раза проверять if (UseRSI) )


А что мешает вдуматся про что я пишу?
Александр
82
Александр 2014.04.03 08:23  

Да уже все вдумались и даже ответили.

Теперь ваша очередь вдуматься в ответы.

Sergey Gridnev
4864
Sergey Gridnev 2014.04.03 09:22  
eevviill:

А что мешает вдуматся про что я пишу?


Я вдумался и ответил.

Теперь Ваша очередь вдумываться.

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий