El futuro de MQL5 es MQL5+ o incluso MQL6 - página 9

 

Mihail Matkovskij:

Aunque es posible saltárselos, la pregunta es ¿por qué, cuando no existen estos problemas en otros núcleos modernos?

Otras lenguas modernas tienen una forma diferente de hacer las cosas. Por ejemplo, en Java no hay variables globales ni constantes, pero en su lugar se pueden utilizar las variables estáticas de las clases declaradas. Pero el punto no cambia, porque si se especifica un nombre de variable estática que se duplica en diferentes clases, el compilador pedirá que se aclare el nombre del paquete y la clase a la que pertenece, porque el proceso de compilación no tiene habilidades telepáticas. Lo mismo ocurre con las clases. Si se especifica un nombre de clase o interfaz que está duplicado en diferentes paquetes, el compilador volverá a pedir que se especifique el nombre del paquete.
 
Mihail Matkovskij:

Aunque el error no es crítico, sigue siendo un inconveniente.

No es un error, es más bien una notificación. Algunos idiomas ni siquiera tienen notificaciones de este tipo. Algo en el ámbito local se solapó con algo superior, así sea. Así es como se pretendía. Pero en algunos casos esta advertencia es bastante útil.

Por ejemplo, en MQL, las variables globales no tienen nada que ver y mi recomendación de no utilizarlas tampoco es pertinente:

Crear varios ámbitos:

int OnInit()
  {
        int i = 10;
        {
                int i =5;
                {
                        int i = 0;
                }
        }
   return(INIT_SUCCEEDED);
  }

Y he aquí que recibimos dos avisos.

declaration of 'i' hides local declaration at line 3    
declaration of 'i' hides local declaration at line 5    

De ahí la conclusión -

1) ignorar estas advertencias
2) evitar el uso de los mismos nombres en las áreas de visibilidad de abajo/arriba
3) convencer al Servicio de Atención al Cliente de que elimine esta notificación por considerarla inútil

 
Igor Volodin:

3) convencer al Servicio de Atención al Cliente de que elimine esta notificación por considerarla inútil

Si cada idiota convence al Service Desk para que elimine tal o cual norma, porque desde su punto de vista es inútil, el lenguaje pronto degenerará en una basura primitiva.

 
Mihail Matkovskij:

¿Cómo no se puede crear? Cualquier lenguaje de programación utiliza libremente variables globales y no pasa nada, pero aquí el compilador jura. Aunque el error no es crítico, sigue siendo un inconveniente.

El punto variable informa del precio de 1 punto y es un sustituto del Punto estándar. La función MarketInfo(EA_Symbol(), MODE_POINT) da el precio de 1 punto para cualquier símbolo. Además, el punto de la variable se puede utilizar en cualquier función, en el cuerpo de la EA, si es una variable global, por supuesto. Estoy de acuerdo en que estos casos causan algunos inconvenientes con bastante frecuencia (si ciertamente tiene experiencia en la programación MQL). Y aunque se pueden evitar, la pregunta es por qué, si otras lenguas modernas simplemente no tienen esos problemas.

La variable punto no puede ser una variable global. Esto se debe a que el precio de los puntos es diferente para los distintos símbolos (aunque por regla general los precios de los puntos coinciden). En consecuencia, el valor del pip sólo puede calcularse dentro de un EA específico que opere en un símbolo específico y de ninguna otra manera.
 

Desgraciadamente, sólo los programadores experimentados comprenden la utilidad e importancia de esta advertencia.

Bueno, recomiendo a todos los demás que se alegren de este nivel de ayuda del compilador y arreglen sus propios errores. Estos son lugares reales de errores potenciales y es exactamente para los desarrolladores novatos que es críticamente importante aprender.

 

Me gustaría una combinación de colores. No sólo en el editor, sino también en otras ventanas, para poder cambiar el texto y el color de fondo.

Los datos de los miembros de la clase no deben colorearse con el color de las variables de instancia cuando los nombres coinciden.

 

Ya varias veces, al terminar la jornada laboral y cerrar ventanas de programas, navegadores, etc., he cerrado accidentalmente también el terminal MT5 que se ejecuta en modo de optimización. Así, se perdieron todos los resultados. Al reiniciar el terminal, todo vuelve a empezar.

Muchos programas cuando haces clic para cerrar una ventana, te preguntan si estás seguro de cerrarla y se pueden perder los datos no guardados.

Es una buena idea hacer esto si se está optimizando el terminal.

 
Igor Volodin:

Ni siquiera es un error, es más bien una notificación. Algunos idiomas ni siquiera tienen notificaciones de este tipo. Algo en un área local se superpuso a algo en un nivel superior, así que bien. Así es como se pretendía. Pero en algunos casos esta advertencia es bastante útil.

Por ejemplo, en MQL, las variables globales no tienen nada que ver y mi recomendación de no utilizarlas tampoco es pertinente:

Crear varios ámbitos:

Y he aquí que recibimos dos avisos.

De ahí la conclusión.

1) ignorar estas advertencias
2) no hacer los mismos nombres en las áreas de visibilidad de abajo/arriba
3) convencer a servicedesk de que elimine esta notificación por considerarla inútil

Bueno, 2 variables con el mismo nombre en un ámbito no es bueno y cualquier programador lo sabe. Pero el problema es que este ámbito abarca módulos estándar que cualquier programador medio no manipularía ya que no se considera un desarrollador. Eliminar las advertencias tampoco es una opción. No prestarles atención también es un verdadero inconveniente, ya que podría no advertir avisos importantes.

Veo dos formas de resolver el problema aquí.

1. Hacer que el plugin no vea el programa del plugin, si no se especifica explícitamente

2. Si los desarrolladores no están dispuestos a cambiar la sintaxis, introduzca una regla para la declaración de parámetros en las funciones, similar a la de los campos de clase, por ejemplo, los nombres de los parámetros deben empezar por i o i_ (del alfabeto Entrada) y así fijar todos los parámetros en los módulos estándar

 

El compilador funciona correctamente y estas advertencias son excepcionalmente correctas.

Sólo hay una salida: evitar la superposición de variables y no tratar de preservar el derecho a equivocarse exigiendo a los demás que respeten ese derecho.

 
Renat Fatkhullin:

El compilador funciona correctamente y estas advertencias son excepcionalmente correctas.

Sólo hay una salida: no permitir el solapamiento de variables y no intentar preservar el derecho a equivocarse exigiendo al resto que respete ese derecho.

Es probable que me hayas malinterpretado. No estoy exigiendo nada a nadie, sólo estoy dando consejos sobre cómo hacer que MQL sea más fácil de usar.