Bibliotecas: Price_Compare - página 4

 
Koldun Zloy:

Digamos. ¿Cuál es exactamente la función de las macros?

void OnTick() // Encuadre.
{
  Print("Hello World!");
  
  ::OnTick2();
}

#define OnTick OnTick2

void OnTick() {} // Original.
[Eliminado]  

Es todo un poco esquivo. No es tan difícil insertar el código necesario en una función.

En realidad estás ocultando al usuario de la librería que se añade código a la función.

Si tienes que lidiar con este tipo de trucos en el programa de otra persona, maldecirás al autor.


Y aquí tienes un ejemplo de uso incorrecto de macros en tu biblioteca:

#define  CHECK_INIT_SYNC if (INIT_SYNC::Check()) return

void OnTimer( void )
{
  CHECK_INIT_SYNC;

  ::OldOnTimer();
}

Esta macro oculta que puede haber una salida de función en este lugar.

¿Para qué la necesitas? ¿Para ahorrar unos céntimos de letra? Eso no es serio.


Puedes usar macros para la compilación condicional y para la declaración de tipos (todavía no existe el typedef normal).

A veces también hay que declarar constantes usando macros.

En todos los demás casos las macros sólo confunden el código.

He aquí un claro ejemplo de confusión: https: //www.mql5.com/ru/forum/170952/page50#comment_5488178.

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2017.07.20
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Koldun Zloy:

Todo esto es un poco esquivo. No es tan difícil insertar el código necesario en una función.

En realidad estás ocultando al usuario de la librería que se añade algo de código a la función.

Si tienes que lidiar con este tipo de trucos en un programa ajeno, maldecirás al autor.

La cuestión está en la conveniencia y la demanda de esta solución. En este caso es posible dar o quitar cualidades síncronas a un indicador a través de una línea. Tal vez sea usted quien lo encuentre inconveniente.

Y aquí tienes un ejemplo de uso incorrecto de macros en tu librería:

Esta macro oculta que puede haber una salida de la función en este lugar.

¿Para qué la necesitas? ¿Para ahorrar unos céntimos de letra? Eso no es serio.

Sacarlo de contexto así no es bueno. Una macro se utiliza en cada función On.

Está permitido usar macros para la compilación condicional y para la declaración de tipos (todavía no existe un typedef normal).

A veces también es necesario declarar constantes usando macros.

En todos los demás casos, las macros sólo confunden el código.

He aquí un vívido ejemplo de confusión: https: //www.mql5.com/ru/forum/170952/page50#comment_5488178.

¿Qué hay de malo en esto?

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)


¿Qué pasa si necesitamos reemplazar OrdersTotal()?

[Eliminado]  

Sacarla así de contexto no es bueno. La macro se utiliza en todas las funciones On.

Las he visto todas. No hace nada útil en todas esas funciones.

¿Qué tiene de malo esta?

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

Tampoco hace nada más que confundir.

¿Qué pasa si necesitamos reemplazar OrdersTotal()?


No necesitas reemplazar OrdersTotal().

 
Koldun Zloy:

Las he visto todas. En todas estas funciones, no hace nada útil.

Tampoco hace nada más que confundir.

No necesitas reemplazar OrdersTotal().

Oído. No sé hasta qué punto es cómodo para los demás utilizar las librerías publicadas y cuántas personas son sus usuarios.

Por eso no voy a hablar por los demás. Quizás, algún día tendré una actitud diferente hacia las macros. Ahora mismo no puedo estar de acuerdo contigo.