L'avenir de MQL5 est MQL5+ ou même MQL6 - page 9

 

Mihail Matkovskij:

Bien qu'ils puissent être contournés, la question est de savoir pourquoi, alors qu'il n'y a pas de tels problèmes dans d'autres noyaux modernes ?

D'autres langues modernes ont une façon différente de procéder. Par exemple, en Java, il n'y a pas de variables et de constantes globales, mais les variables statiques des classes déclarées peuvent être utilisées à la place. Mais le point ne change pas, car si vous spécifiez un nom de variable statique qui est dupliqué dans différentes classes, le compilateur demandera de clarifier le nom du paquet et de la classe auxquels il appartient, car le processus de compilation n'a pas de capacités télépathiques. Il en va de même pour les cours. Si vous spécifiez un nom de classe ou d'interface qui est dupliqué dans différents packages, le compilateur vous demandera à nouveau de spécifier le nom du package.
 
Mihail Matkovskij:

Bien que l'erreur ne soit pas critique, elle est tout de même gênante.

Ce n'est pas une erreur, c'est plutôt une notification. Certaines langues ne disposent même pas de notifications de ce type. Quelque chose dans le champ d'application local a chevauché quelque chose de plus élevé, ainsi soit-il. C'est ainsi que cela a été prévu. Mais dans certains cas, un tel avertissement est plutôt utile.

Par exemple, dans MQL, les variables globales n'ont rien à voir et ma recommandation de ne pas les utiliser n'est pas non plus pertinente :

Créez plusieurs champs d'application :

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

Et voilà, nous avons deux avertissements.

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

D'où la conclusion -

1) ignorer ces avertissements
2) éviter d'utiliser les mêmes noms dans les zones de visibilité inférieures/supérieures
3) convaincre le Service Desk de supprimer cette notification comme étant inutile.

 
Igor Volodin:

3) convaincre le Service Desk de supprimer cette notification comme étant inutile.

Si chaque idiot convainc le Service Desk de supprimer telle ou telle règle, parce que, de son point de vue, elle est inutile, la langue dégénérera bientôt en un déchet primitif.

 
Mihail Matkovskij:

Je veux dire, comment peut-il ne pas être créé ? N'importe quel langage de programmation utilise librement des variables globales et c'est correct, mais ici le compilateur jure. Bien que l'erreur ne soit pas critique, elle est tout de même gênante.

Le point variable rapporte le prix d'un point et remplace le point standard. La fonction MarketInfo(EA_Symbol(), MODE_POINT) donne le prix de 1 point pour n'importe quel symbole. En outre, le point variable peut être utilisé dans n'importe quelle fonction, dans le corps de l'EA, s'il s'agit d'une variable globale bien sûr. Je suis d'accord pour dire que de tels cas causent assez souvent des inconvénients (si vous avez certainement de l'expérience dans la programmation MQL). Et bien qu'ils puissent être évités, la question est de savoir pourquoi, si d'autres langues modernes n'ont tout simplement pas de tels problèmes ?

Le point variable ne peut pas être une variable globale. En effet, le prix du point est différent pour les différents symboles (bien qu'en règle générale, les prix du point coïncident). Par conséquent, la valeur du pip ne peut être calculée que dans le cadre d'un EA spécifique négociant sur un symbole spécifique et d'aucune autre manière.
 

Malheureusement, seuls les programmeurs expérimentés comprennent l'utilité et l'importance d'un tel avertissement.

Eh bien, je recommande à tous les autres d'être heureux de ce niveau d'aide du compilateur et de corriger leurs propres erreurs. Ce sont de véritables lieux d'erreurs potentielles et c'est précisément pour les développeurs novices qu'il est essentiel d'apprendre.

 

Je voudrais un schéma de couleurs. Non seulement dans l'éditeur, mais aussi dans d'autres fenêtres, de sorte que le texte et la couleur de fond peuvent être modifiés.

Les données des membres de la classe ne doivent pas être colorées dans la couleur des variables d'instance lorsque les noms coïncident.

 

Plusieurs fois déjà, en terminant la journée de travail et en fermant les fenêtres de programmes, les navigateurs, etc., j'ai accidentellement fermé le terminal MT5 fonctionnant en mode optimisation. Ainsi, tous les résultats ont été perdus. En redémarrant le terminal, tout recommence.

De nombreux programmes, lorsque vous cliquez pour fermer une fenêtre, vous demandent si vous êtes sûr de la fermer, ce qui peut entraîner la perte de données non sauvegardées.

C'est une bonne idée de le faire si le terminal est optimisé.

 
Igor Volodin:

Ce n'est même pas une erreur, c'est plutôt une notification. Certaines langues n'ont même pas de notifications de ce type. Quelque chose dans une zone locale chevauchait quelque chose dans un niveau plus élevé, donc bien. C'est ainsi que cela a été prévu. Mais dans certains cas, un tel avertissement est plutôt utile.

Par exemple, dans MQL, les variables globales n'ont rien à voir et ma recommandation de ne pas les utiliser n'est pas non plus pertinente :

Créez des champs d'application multiples :

Et voilà, nous avons deux avertissements.

D'où la conclusion.

1) ignorer ces avertissements
2) ne pas faire les mêmes noms dans les zones de visibilité ci-dessous/au-dessus
3) convaincre Servicedesk de supprimer cette notification, jugée inutile.

Eh bien, 2 variables avec le même nom dans une portée n'est pas bon et tout programmeur le sait. Mais le problème est que ce champ d'application couvre des modules standard que tout programmeur moyen ne modifierait pas puisqu'il ne se considère pas comme un développeur. Supprimer les avertissements n'est pas non plus une option. Ne pas y prêter attention est aussi un véritable inconvénient car vous risquez de ne pas remarquer des avertissements importants.

Je vois deux façons de résoudre le problème ici.

1. Faire en sorte que le plugin ne voit pas le programme du plugin, s'il n'est pas explicitement spécifié.

2. Si les développeurs ne sont pas disposés à changer la syntaxe, introduisez une règle pour la déclaration des paramètres dans les fonctions, similaire aux champs de classe, par exemple, les noms de paramètres doivent commencer par i ou i_ (de l'alphabet Input) et ainsi fixer tous les paramètres dans les modules standards

 

Le compilateur fonctionne correctement et ces avertissements sont exceptionnellement corrects.

Il n'y a qu'une seule solution : ne pas autoriser le chevauchement des variables et ne pas essayer de préserver le droit à l'erreur en exigeant que les autres respectent ce droit.

 
Renat Fatkhullin:

Le compilateur fonctionne correctement et ces avertissements sont exceptionnellement corrects.

Il n'y a qu'une seule solution : ne pas autoriser le chevauchement des variables et ne pas essayer de préserver le droit à l'erreur en exigeant que les autres respectent ce droit.

Vous m'avez probablement mal compris. Je n'exige rien de personne, je ne fais que donner des conseils sur la façon de rendre MQL plus convivial.