Новичок спрашивает! - страница 26

 
Alexander Bereznyak:

это ваши слова, никаких предупреждений нет, но они на самом деле есть

в каком мире вы живете, что курите, поделитесь

Т.е. вы так за меня смело утверждаете про мой код который не видите? Грибами не ошиблись?
 
Dmitry Fedoseev:
Т.е. вы так за меня смело утверждаете про мой код который не видите? Грибами не ошиблись?

все понял, не дурак, у вас спецкомпилятор без предупреждений, специально лично от MQ

PS: и я такой хочу, дяд дай поюзать 

 
Михаил:

Приведённый Вами код - вообще не правильный!

Должно быть так:

ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));

Не правильно, потому что потом идёт сравнение:

if(type==(long)POSITION_TYPE_BUY


нет, не прав.

это здесь не при чём.

Кодописатель просто перестраховался либо копипастил откудато приведение типа.


на самом деле

код

    long type=PositionGetInteger(POSITION_TYPE);
    if (type==POSITION_TYPE_BUY) return;

не выдает ни ошибки ни предупреждения.

явного приведения при сравнении  MQL не требует


PS. Тестируйте свои предположения, перед тем как начать спорить.

 

очень плохой пример, вы проскочили на сравнении, а дальше нарветесь на ошибку:

 

 
o_O:

PS. Тестируйте свои предположения, перед тем как начать спорить.

делая предложения, думайте о последствиях
 
o_O:


нет, не прав.

это здесь не при чём.

Кодописатель просто перестраховался либо копипастил откудато приведение типа.


на самом деле

код

не выдает ни ошибки ни предупреждения.

явного приведения при сравнении  MQL не требует


PS. Тестируйте свои предположения, перед тем как начать спорить.

о_О!

Правильно - не правильно....

Создаётся такое впечатление, что вообще не читаете, что пишут другие!

По правилам программирования:

ПРИНИМАЮЩАЯ ПЕРЕМЕННАЯ ФУНКЦИИ ДОЛЖНА БЫТЬ ТОГО ЖЕ ТИПА ЧТО И ТИП ВОЗВРАЩАЕМОГО ЗНАЧЕНИЯ ЭТОЙ ФУНКЦИИ!

ВСЁ!

На этом измышления пора закончить. 

Почему Вы не написали так:

int type=PositionGetInteger(POSITION_TYPE);

 Да потому что знаете, что функция всегда возвращает LONG

А в справке ясно написано, что для аргумента POSITION_TYPE функции PositionGetInteger() возвращаемое

значение ENUM_POSITION_TYPE, а не LONG

А если хотите поупражняться в приведении типов, то пишите так:

int type = int(PositionGetInteger(POSITION_TYPE));

 

if (type==POSITION_TYPE_BUY) return;

То, что компилятор не выдаёт ошибку - это не значит, что Вы написали правильно!

Это говорит о "вольности" компилятора и только! (позволяет сравнивать LONG и INTEGER) 

В этой ситуации ПРАВИЛЬНО нужно делать так:

 ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
 
Alexander Bereznyak:

очень плохой пример, вы проскочили на сравнении, а дальше нарветесь на ошибку:

вы где то увидели про дальнейшее с приведением типов?  не оправдывайте свои тезисы, ссылаясь на иной предмет разговора. 

речь только про сравнение и только в данном случае long - enum.


Вы забрели уже в непроглядные дебри мыслей, хотя вопрос был прямой, на который ответ дал еще integer

Nextor257:

подскажите, не могу понять что за сравнение такое?

if(type==(long)POSITION_TYPE_BUY)

Зачем перед  POSITION_TYPE_BUY указано (long) ?


Dmitry Fedoseev:

Это изменение типа переменой на лету.

 
Dmitry Fedoseev:

long и lоng вместо ENUM_POSITION_TYPE и ENUM_POSITION_TYPE

8 знаков (которые можно набрать с закрытыми глазами) вместо 36-ми знаков (да еще в верхнем регистре)! К тому же разнообразная информация не имеющая в себе смысла. Вот это не есть хороший стиль программирования - и лишняя писанина и лишняя информация.

В данном случае Михаил абсолютно прав (При всем моем отвращении к стилю программирования Михаила).

И дело здесь не в потенциальных предупреждениях и тем более количестве символов, а в строгой типизации. Перечисление ENUM_POSITION_TYPE - уникальный тип данных. Он не long не int а именно ENUM_POSITION_TYPE. И использовать его нужно как ENUM_POSITION_TYPE и никак иначе. А если перечисление набирать долго, то автозаполнение включается уже на третьем знаке,  и это вообще ни какая не проблема. А проблема в использовании именно long, потому что он может быть практически каким угодно, а ENUM_POSITION_TYPE нет.

o_O:

явного приведения при сравнении  MQL не требует

Написал вначале что требует, но потом увидел слово "при сравнении". Действительно, при сравнении явного приведения не требуется, потому что MQL это делает неявно. И лучше он этого бы не делал вовсе, потому что результат зачастую бывает неопределенным. Но в других нормальных строго-типизированных языках явное приведение типов требуется вообще всегда.

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

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