¡Un recién llegado pregunta! - página 26

 
Alexander Bereznyak:

estas son sus palabras, no hay advertencias, pero realmente las hay

En qué mundo vives, qué fumas, comparte

¿Así que te atreves a reclamar por mi código que no puedes ver? ¿Te has equivocado con las setas?
 
Dmitry Fedoseev:
¿Así que afirmas tan audazmente por mí sobre mi código que no ves? ¿No te equivocas de setas?

Lo tengo, no es una tontería, tienes un compilador especial sin advertencias, sobre todo personalmente de MQ

PD: Yo también quiero uno, déjame usarlo.

 
Михаил:

El código que has dado no es correcto en absoluto.

Debería ser así:

ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));

No, porque entonces hay una comparación:

if(type==(long)POSITION_TYPE_BUY


No, no lo es.

Esto no tiene nada que ver.

El codificador simplemente reaccionó de forma exagerada o copió la conversión de tipo de algún lugar.


de hecho

código

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

no genera ningún error ni advertencia.

MQL no requiere una conversión explícita


PS. Comprueba tus suposiciones antes de empezar a discutir.

 

un ejemplo muy malo, te equivocas en una comparación y entonces te encuentras con un error:

 
o_O:

PS. Comprueba tus suposiciones antes de empezar a discutir.

Pensar en las consecuencias al hacer propuestas
 
o_O:


No, no lo harás.

No tiene nada que ver.

El codificador simplemente exageró o copió de otro lugar .


de hecho

código

no genera ningún error ni advertencia.

MQL no requiere una conversión explícita


PS. Comprueba tus suposiciones antes de empezar a discutir.

¡o_o!

Derecho - wrong....

Tengo la impresión de que no lees lo que escriben los demás.

Según las normas de programación:

LA VARIABLE DE LA FUNCIÓN ACEPTADA DEBE SER DEL MISMO TIPO QUE EL VALOR DE RETORNO DE ESTA FUNCIÓN.

¡ESO ES!

Este es el fin de esta especulación.

¿Por qué no lo escribiste así?

int type=PositionGetInteger(POSITION_TYPE);

Porque sabes que la función siempre devuelve LONG.

Y la referencia dice claramente queel valor devuelto para el argumento POSITION_TYPE de la funciónPositionGetInteger() es

es ENUM_POSITION_TYPE, no LONG

Y si quieres practicar la fundición de tipos, escríbelo así:

int type = int(PositionGetInteger(POSITION_TYPE));

if (type==POSITION_TYPE_BUY) return;

El hecho de que el compilador no te dé un error no significa que lo hayas escrito correctamente.

Indica el "libre albedrío" del compilador y eso es todo. (Permite comparar LONG e INTEGER).

Esta es la manera correcta de manejar esta situación:

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

Un ejemplo muy malo, te has saltado la comparación, y entonces te dará un error:

¿Has visto en algún sitio lo de seguir con la conversión de tipos? No justifiques tus tesis refiriéndote a otro tema de la discusión.

Sólo se trata de comparar y sólo en este caso long es enum.


Ya entraste en la espesura de los pensamientos, aunque la pregunta fue directa, que fue respondida por entero

Nextor257:

Por favor, aconséjeme, no puedo entender qué tipo de comparación es ésta.

if(type==(long)POSITION_TYPE_BUY)

¿Por qué (long) va precedido de POSITION_TYPE_BUY ?


Dmitry Fedoseev:

Se trata de un cambio de tipo de variable sobre la marcha.

 
Dmitry Fedoseev:

long y lon en lugar deENUM_POSITION_TYPE yENUM_POSITION_TYPE

8 caracteres (que puedes escribir con los ojos cerrados) en lugar de 36 (y en mayúsculas). Además, hay todo tipo de información que no tiene sentido. Este no es un buen estilo de programación: escritura innecesaria e información redundante.

En este caso, Mikhail tiene toda la razón (Con todo mi disgusto por el estilo de programación de Mikhail).

Y no se trata de las posibles advertencias y, además, del número de caracteres, sino de la escritura estricta. La enumeración ENUM_POSITION_TYPE es un tipo de datos único. Es ENUM_POSITION_TYPE, no long ni int. Debe utilizarlo como ENUM_POSITION_TYPE y de ninguna otra manera. Y si escribes largo, la función de autocompletar comenzará en el tercer carácter, y no hay ningún problema. Y el problema está en usar long, porque puede ser casi cualquier cosa, mientras que ENUM_POSITION_TYPE no lo es.

o_O:

MQL no requiere una conversión explícita

Al principio escribí que sí, pero luego vi la palabra "comparación". En realidad, no se necesita ninguna conversión explícita en comparación porque MQL lo hace implícitamente. Y más vale que no lo haga, porque el resultado suele ser indefinido. Pero en otros lenguajes normales estrictamente tipificados siempre se requiere una conversión de tipos explícita.

P.D. Por una vez, Michael dio una respuesta competente, pero la gente empezó a destrozarlo, como es habitual aquí también. Y en vano, porque en este caso tiene razón.