Auto-apprentissage du langage MQL5 à partir de zéro - page 44

 
Vladimir Simakov:

Les objets globaux, sont initialisés avec le constructeur par défaut. Pour les types primitifs (dans notre cas, tous sauf les chaînes de caractères), c'est 0. Mais pour la mémoire (lire les variables) allouée sur la pile, elle n'est pas initialisée. C'est pourquoi les variables globales peuvent ne pas être initialisées, rappelez-vous que dans ce cas elles seront égales à zéro. Mais l'absence d'initialisation (en même temps, habituez-vous à éviter immédiatement les avertissements générés par le compilateur, à moins que vous ne sachiez exactement ce que vous faites) est un problème sérieux, car la lecture d'une variable non initialisée entraîne un comportement indéfini. Par exemple, ce code se comporte différemment dans les versions release et debug et personne ne peut garantir que si vous changez la version du compilateur ou les paramètres d'optimisation, son comportement ne changera pas aussi :

Bonjour, Vladimir, merci de votre précision.

Sincèrement, Vladimir.

 
MrBrooklin:

Peter, au sujet des variables globales, je n'ai pas encore trouvé dans la littérature que les variables globales doivent être prédéfinies. Avez-vous un lien vers la source pour améliorer vos connaissances en la matière ? La référence MQL5 ne contient pas de référence explicite à l'initialisation :

Le type bool est conçu pour stocker les valeurs logiques true ou false, dont la représentation numérique est respectivement 1 ou 0 .

Exemples :

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

La représentation interne est un nombre entier de 1 octet. Il convient de noter que dans les expressions booléennes, il est acceptable d'utiliser d'autres types entiers ou réels ou des expressions de ces types à la place de bool, et le compilateur ne générera pas d'erreur. Dans ce cas, le zéro sera interprété comme faux et toutes les autres valeurs comme vraies.

Salutations, Vladimir.
Il est souhaitable d'initialiser explicitement les variables globales, au moins pour s'habituer à le faire. Encore une fois, dans mql4 vous ne pouvez pas du tout initialiser les variables et les tableaux dans les fonctions, mais dans mql5 vous devez le faire, sinon les variables auront des "déchets".
 

Je l'ai ajouté au code du script :

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

Dans les commentaires du script, un étudiant en programmation de première année a clairement expliqué pourquoi la valeur prédéfinie du type de données bool doit être exactement fausse et non vraie.

Salutations, Vladimir.

 
MrBrooklin:

Je l'ai ajouté au code du script :

Respectueusement, Vladimir.

Je n'ai pas d'autre raison de me plaindre. :)
 
MrBrooklin:

Je continue à étudier le langage de programmation MQL5 et je publie le code d'un script, qui est la suite d'une tâche des participants de ce fil. Le script a été testé dans tous les modes. Aucun problème n'a été détecté. Appliqué le nombre minimum de paramètres d'entrée pour commencer. Le code du script est écrit en anglais, les commentaires du code sont en russe, pour faciliter le processus d'apprentissage. Comme je l'ai promis plus tôt, j'ai essayé de décrire le script d'une manière compréhensible pour un élève de la première classe de l'école de programmation.

Meilleures salutations, Vladimir.

Vladimir, tu ne devrais pas l'écrire comme ça. Ne pas court-circuiter le travail des fonctions sur les variables externes. La seule exception pour vous jusqu'à présent est la prise de valeurs à partir de variables d'entrée.
 
Vasiliy Sokolov:
Vladimir, tu ne devrais pas l'écrire comme ça. Ne pas verrouiller les fonctions dans les variables externes. La seule exception pour vous jusqu'à présent est la prise de valeurs à partir de variables d'entrée.

Bonjour Vasily ! Pour être honnête, je n'ai pas bien compris le sens de ce qui est en gras. Veuillez préciser ce que vous entendez par là.

Sincèrement, Vladimir.

 
MrBrooklin:

Bonjour Vasily ! Honnêtement, je n'ai pas bien compris le sens de ce qui était écrit en gras. Veuillez préciser ce que vous entendez par là.

Sincèrement, Vladimir.

N'utilisez pas de variables globales. J'expliquerai plus tard pourquoi il ne faut pas les utiliser.
 
Vasiliy Sokolov:
N'utilisez pas de variables globales. J'écrirai plus tard pourquoi vous ne devriez pas les utiliser.

Il y a une bonne anecdote à ce sujet :

- Question : quel est le meilleur type pour une variable globale en c++ ?

- Réponse : //

 
Vasiliy Sokolov:
N'utilisez pas de variables globales. J'écrirai plus tard pourquoi il ne faut pas les utiliser.

Maintenant je comprends. Merci, j'attends que vous me disiez pourquoi vous ne pouvez pas utiliser les variables globales.

Salutations, Vladimir.

 
A ce stade, jusqu'à la transition vers la programmation OOP, l'utilisation des variables globales est pleinement justifiée et il n'y a aucune raison de s'en détourner. Ils sont pratiques et faciles à utiliser partout dans le programme. Pourquoi ne devraient-ils pas être utilisés ? Je pense.
Raison: