Autoaprendizaje del lenguaje MQL5 desde cero - página 44

 
Vladimir Simakov:

Los objetos globales, se inicializan con el constructor por defecto. Para los tipos primitivos (en nuestro caso, todos excepto string), es 0. Pero para la memoria (leer variables) asignada en la pila, no se inicializan. Por eso las variables globales pueden no ser inicializadas, recuerda que en este caso serán iguales a cero. Pero la ausencia de inicialización (al mismo tiempo, acostúmbrate a evitar las advertencias generadas por el compilador de inmediato, a menos que sepas exactamente lo que estás haciendo) es un problema grave, porque la lectura de una variable no inicializada conduce a un comportamiento indefinido. Por ejemplo, este código se comporta de forma diferente en las versiones de lanzamiento y de depuración y nadie puede garantizar que cuando se cambie la versión del compilador o la configuración de optimización, su comportamiento no cambie también:

Hola, Vladimir. Gracias por tu aclaración.

Sinceramente, Vladimir.

 
MrBrooklin:

Peter, sobre el tema de las variables globales, todavía no he encontrado en la literatura que las variables globales tengan que estar predefinidas. ¿Tiene un enlace a la fuente para mejorar sus conocimientos en esta materia? La Referencia MQL5 no contiene una referencia explícita a la inicialización:

El tipo bool está diseñado para almacenar los valores booleanos true o false, cuya representación numérica es 1 o 0 respectivamente .

Ejemplos:

bool a =true;
bool b =false;
bool c =1;

La representación interna es un número entero de 1 byte. Hay que tener en cuenta que en las expresiones booleanas, es aceptable utilizar otros tipos enteros o reales o expresiones de estos tipos en lugar de bool, y el compilador no generará un error. En este caso, el cero se interpretará como falso y todos los demás valores como verdaderos.

Saludos, Vladimir.
Es conveniente inicializar explícitamente las variables globales, al menos para acostumbrarse a hacerlo. De nuevo, en mql4 no se pueden inicializar las variables y arrays en las funciones para nada, pero en mql5 es obligatorio, de lo contrario las variables tendrán "basura".
 

Lo he añadido al código del script:

//--- Зададим глобальные переменные:
//переменная enough_time (достаточно времени), где bool - логическое значение: истина (true) или ложь (false)
bool enough_time=false;
//переменная enough_patience (достаточно терпения), где bool - логическое значение: истина (true) или ложь (false)
bool enough_patience=false;

Ahora, en los comentarios del script, de alguna manera se explica claramente para un estudiante de la escuela de programación de primer grado por qué el valor predefinido para el tipo de datos bool debe ser exactamente falso y no verdadero.

Saludos, Vladimir.

 
MrBrooklin:

Se ha añadido al código del script:

Respetuosamente, Vladimir.

No tengo nada más de lo que quejarme. :)
 
MrBrooklin:

Sigo estudiando el lenguaje de programación MQL5 y estoy publicando el código de un script, que es una continuación de una tarea de los participantes de este hilo. El script ha sido probado en todos los modos. No se ha detectado ningún problema. Aplicó el número mínimo de parámetros de entrada para empezar. El código del script está escrito en inglés, los comentarios al código están en ruso, para facilitar el proceso de aprendizaje. Como he prometido antes, he intentado describir el guión de forma comprensible para un alumno de la escuela de programación de 1º curso.

Saludos cordiales, Vladimir.

Vladimir, no deberías escribirlo así. No cortocircuitar el trabajo de las funciones sobre las variables externas. La única excepción hasta ahora es tomar valores de las variables de entrada.
 
Vasiliy Sokolov:
Vladimir, no deberías escribirlo así. No bloquear funciones en variables externas. La única excepción hasta ahora es tomar valores de las variables de entrada.

¡Hola Vasily! Para ser sincero, no entendí bien el significado de lo que está en negrita. Por favor, explique lo que quiere decir con ello.

Sinceramente, Vladimir.

 
MrBrooklin:

¡Hola Vasily! Sinceramente, no entendí bien el significado de lo que estaba escrito en negrita. Por favor, explique lo que quiere decir con ello.

Sinceramente, Vladimir.

No utilice variables globales. Más adelante escribiré por qué no deben utilizarse.
 
Vasiliy Sokolov:
No utilice variables globales. Por qué no deberías usarlos, lo escribiré más tarde.

Hay una buena anécdota sobre esto:

- Pregunta: ¿Cuál es el mejor tipo para una variable global en c++?

- Respuesta: //

 
Vasiliy Sokolov:
No utilice variables globales. Más adelante escribiré por qué no deben utilizarse.

Ahora lo entiendo. Gracias, esperaré a que me digan por qué no se pueden usar variables globales.

Saludos, Vladimir.

 
En esta etapa, hasta la transición a la programación OOP, el uso de variables globales está plenamente justificado y no hay razón para alejarse de ellas. Son convenientes y fáciles de usar en cualquier parte del programa. ¿Por qué no deberían utilizarse? Yo creo que sí.
Razón de la queja: