Un nouveau venu demande ! - page 26

 
Alexander Bereznyak:

ce sont vos mots, il n'y a pas d'avertissement, mais il y en a vraiment un.

Dans quel monde vivez-vous, que fumez-vous, partagez-vous ?

Vous avez donc l'audace de prétendre que vous ne pouvez pas voir mon code ? Vous vous êtes trompés dans les champignons ?
 
Dmitry Fedoseev:
Ainsi, vous affirmez si audacieusement pour moi sur mon code que vous ne voyez pas ? Vous ne vous trompez pas de champignons ?

Je l'ai eu, pas un idiot, vous avez un compilateur spécial sans avertissements, spécialement personnellement de MQ

PS : J'en veux un aussi, donnez-le moi.

 
Михаил:

Le code que vous avez donné n'est pas du tout correct !

Ça devrait être comme ça :

ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));

Faux, parce qu'alors il y a une comparaison :

if(type==(long)POSITION_TYPE_BUY


Non, ça ne l'est pas.

Cela n'a rien à voir avec ça.

Le codeur a juste réagi de manière excessive ou a copié la conversion de type de quelque part.


en fait

code

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

ne génère aucune erreur ou avertissement.

MQL ne nécessite pas de conversion explicite


PS. Testez vos hypothèses avant de commencer à argumenter.

 

un très mauvais exemple, vous faites une erreur de comparaison et vous tombez dans l'erreur :

 
o_O:

PS. Testez vos hypothèses avant de commencer à argumenter.

Pensez aux conséquences lorsque vous faites des propositions
 
o_O:


Non, tu ne l'es pas.

Cela n'a rien à voir avec cela.

Le codeur a juste réagi de manière excessive ou a copié quelque chose d'autre .


en effet

code

ne génère aucune erreur ou avertissement.

MQL ne nécessite pas de conversion explicite


PS. Testez vos hypothèses avant de commencer à argumenter.

o_o !

Droit - mauvais....

J'ai l'impression que vous ne lisez pas ce que les autres écrivent !

Selon les règles de programmation :

LA VARIABLE DE LA FONCTION ACCEPTANTE DOIT ÊTRE DU MÊME TYPE QUE LA VALEUR DE RETOUR DE CETTE FONCTION !

C'EST ÇA !

C'est la fin de cette spéculation.

Pourquoi ne l'avez-vous pas écrit de cette façon ?

int type=PositionGetInteger(POSITION_TYPE);

Parce que vous savez que la fonction renvoie toujours LONG.

Et la référence dit clairement quela valeur retournée pour l'argument POSITION_TYPE de la fonctionPositionGetInteger() est

est ENUM_POSITION_TYPE, et non LONG

Et si tu veux t'entraîner à la typographie, écris-le de cette façon :

int type = int(PositionGetInteger(POSITION_TYPE));

if (type==POSITION_TYPE_BUY) return;

Le fait que le compilateur ne vous donne pas d'erreur ne signifie pas que vous l'avez écrit correctement !

Il indique le "libre arbitre" du compilateur et c'est tout ! (Il vous permet de comparer des LONG et des INTEGER).

C'est la bonne façon de gérer cette situation :

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

Un très mauvais exemple, vous avez manqué la comparaison, et vous obtiendrez une erreur :

Ne justifiez pas vos thèses en vous référant à un autre sujet de discussion.

Il ne s'agit que de comparaison et seulement dans ce cas, long est enum.


Vous êtes déjà entré dans le maquis des pensées, bien que la question ait été directe, ce à quoi a répondu l'entier...

Nextor257:

Veuillez me conseiller, je ne comprends pas de quel type de comparaison il s'agit ?

if(type==(long)POSITION_TYPE_BUY)

Pourquoi (long) est-il précédé de POSITION_TYPE_BUY ?


Dmitry Fedoseev:

Il s'agit d'un changement de type de variable à la volée.

 
Dmitry Fedoseev:

long et lon au lieu deENUM_POSITION_TYPE etENUM_POSITION_TYPE

8 caractères (que vous pouvez taper les yeux fermés) au lieu de 36 caractères (et en majuscules) ! En plus de cela, il y a toutes sortes d'informations qui n'ont pas de sens. Ce n'est pas un bon style de programmation - écriture inutile et informations redondantes.

Dans ce cas, Mikhail a tout à fait raison (avec tout mon dégoût pour le style de programmation de Mikhail).

Et il ne s'agit pas d'avertissements potentiels, ni d'ailleurs du nombre de caractères, mais d'une saisie stricte. L'énumération ENUM_POSITION_TYPE est un type de données unique. C'est ENUM_POSITION_TYPE, et non pas long ou int. Vous devez l'utiliser comme ENUM_POSITION_TYPE et d'aucune autre manière. Et si vous tapez longtemps, la fonction d'autocomplétion commencera au troisième caractère, et il n'y a aucun problème. Et le problème réside dans l'utilisation de long, car il peut être presque tout, alors que ENUM_POSITION_TYPE ne l'est pas.

o_O:

MQL n'exige pas une conversion explicite

J'ai d'abord écrit que oui, mais ensuite j'ai vu le mot "comparaison". En fait, aucune conversion explicite n'est nécessaire dans la comparaison car MQL le fait implicitement. Et il vaut mieux ne pas le faire du tout, car le résultat est souvent indéfini. Mais dans d'autres langages normaux strictement typés, une conversion de type explicite est toujours nécessaire.

P.S. Pour une fois, Michael a donné une réponse compétente, mais les gens ont pris l'habitude de le blasphémer ici aussi. Et en vain, car il a raison dans ce cas.