Effacement forcé des tableaux dans MT5 ? - page 3

 
Vladimir Karputov:

L'échec de l'initialisation du tableau est entièrement la faute du kodopistael. Recherchez les erreurs dans votre propre environnement. Reconstruisez votre algorithme.

Il n'y a pas d'erreur.

L'initialisation automatique des tableaux avec des zéros lors de la déclaration est simplement désactivée. Pourquoi ? - inconnu. Pour cette raison, vous devez effacer le tableau manuellement avant de l'utiliser. Ce n'est pas toujours pratique.

 
Реter Konow:

Il n'y a pas d'erreur.

Suppression de l'initialisation automatique des tableaux avec des zéros lors de la déclaration. Pourquoi ? - inconnu. Pour cette raison, vous devez effacer le tableau manuellement avant de l'utiliser. Ce n'est pas toujours pratique.

Que voulez-vous ? Écrire négligemment dans le style du "4" ? Interroger inconsidérément des index inexistants ? Vous comptez sur votre oncle pour initialiser vos tableaux pour vous ?

Le MQL5 réprimande fortement ces amateurs, qui n'ont donc aucun répit. Apprenez à écrire correctement dès le début : si vous avez créé un tableau, vous devez contourner tous les indices et les remplir. Si vous ne voulez pas les remplir tous en même temps, remplissez-les petit à petit en augmentant la taille du tableau.

En général, faites un algorithme normal et ne reportez pas vos problèmes sur les autres.

 
Vladimir Karputov:

Qu'est-ce que tu voulais faire ? Écrire négligemment dans le style du "4" ? Des recherches inconsidérées sur des indices inexistants ? Vous comptez sur l'"oncle" qui initialise vos tableaux pour vous ?

Le MQL5 réprimande fortement ces amateurs, qui n'ont donc aucun répit. Apprenez à écrire correctement dès le début : si vous avez créé un tableau, vous devez contourner tous les indices et les remplir. Si vous ne voulez pas les remplir tous en même temps, remplissez-les petit à petit en augmentant la taille du tableau.

En général, faites un algorithme normal et ne reportez pas vos problèmes sur les autres.

Le fait de pré-remplir un tableau ne risque guère de provoquer des erreurs. C'est pratique.

Dans MT5, vous déclarez un tableau, vous nettoyez la corbeille, puis vous l'utilisez.

Dans MT4, vous déclarez un tableau et vous l'utilisez.

C'est là toute la différence.

Pourquoi devrions-nous transférer la tâche de vider les tableaux à un utilisateur ?

Cela augmente-t-il leur professionnalisme ? Peut-être. Mais cela n'apportera certainement pas d'émotions positives)). Donc, désolé pour ma négativité. J'ai passé plusieurs jours à essayer de comprendre ce qui n'allait pas. Ça commence à me peser.)

 
Suppression de l'auto-nettoyage pour des raisons de rapidité.
 
Реter Konow:

Il n'y a pas d'erreur.

Suppression de l'initialisation automatique des tableaux avec des zéros lors de la déclaration. Pourquoi ? - inconnu. Pour cette raison, vous devez effacer le tableau manuellement avant de l'utiliser. Ce n'est pas toujours pratique.

Peter, l'initialisation est supprimée, car cette procédure prend du temps, et en C++ et MQL5 il n'est pas habituel de payer pour quelque chose que l'on n'utilise pas. L'initialisation d'un tableau n'est pas toujours nécessaire, par exemple, si vous remplissez le tableau avec les valeurs requises immédiatement, elle n'est pas nécessaire.

Quoi qu'il en soit, d'après votre question, je ne comprends pas quelle est la difficulté. Vous connaissez toujours la taille de votre tableau. Si vous répartissez un tableau, vous savez toujours combien d'éléments supplémentaires vous y ajoutez. Il est donc facile d'appeler la fonction ArrayInitialize juste après ArrayResize.

Vous pouvez vous demander comment les gens utilisent MQL5 alors qu'ils doivent prendre en compte tant de choses en plus ? La réponse est la suivante : ceux qui utilisent MQL5 à un bon niveau utilisent la bibliothèque standard, donc ils ne pensent même pas à tous ces trucs, ils n'initialisent pas un tableau ou ne le réétiquettent pas, ils ajoutent simplement de nouvelles valeurs. Mais comme vous êtes un dartan et que vous ne reconnaissez rien de tout cela, vous n'avez qu'une seule option : une gestion de bas niveau et minutieuse de vos tableaux, en utilisant ArrayInitialize.

 
Vasiliy Sokolov:

1. Peter, l'initialisation est supprimée, car cette procédure prend du temps, et en C++ et MQL5 il n'est pas habituel de payer pour quelque chose que l'on n'utilise pas. L'initialisation du tableau n'est pas toujours nécessaire, par exemple si vous remplissez le tableau avec les valeurs requises immédiatement, elle n'est pas nécessaire.

Et pourtant, d'après votre question, je ne comprends pas quelle est la difficulté. Vous connaissez toujours la taille de votre tableau. Si vous répartissez un tableau, vous savez toujours combien d'éléments supplémentaires vous y ajoutez. Il est donc facile d'appeler la fonction ArrayInitialize après ArrayResize.

Vous pouvez vous demander comment les gens utilisent le MQL5 alors qu'il y a tant de choses supplémentaires à prendre en compte ? La réponse est : ceux qui utilisent MQL5 à un bon niveau utilisent la bibliothèque standard, donc ils ne pensent même pas à ces choses, ils n'initialisent pas un tableau ou sa répartition, ils ajoutent juste de nouvelles valeurs. Mais comme vous êtes un dartan et que vous n'admettez rien de tel, vous n'avez qu'une seule option : une gestion de bas niveau et minutieuse de vos tableaux, en utilisant ArrayInitialize.

Vasily, point par point :

1. la logique nous dit que la procédure de nettoyage du tableau n'est exécutée par le compilateur qu'une seule fois lors de la compilation. S'il a été supprimé, cela signifie que l'on a voulu augmenter les performances du compilateur au détriment du confort du programmeur mais peut-être pour augmenter son niveau.

2. La taille du noyau dépend du code cybernétique. Plus il y a d'éléments, plus le tableau du noyau est grand. Par conséquent, le noyau est dynamique. Il est construit par étapes. S'il y a des déchets dans ses cellules, les références d'une cellule à une autre dans des fonctions à différents stades de construction provoqueront un plantage du programme.

Dans MT4, ce problème n'existait pas car les cellules non initialisées étaient des zéros et non des valeurs aléatoires. En bref, ma technologie devrait fonctionner initialement avec un tableau propre.

3. je ne suis pas contre la suppression forcée des tableaux personnalisés, mais, comme je l'ai dit, j'ai été un peu embêté. Pendant quelques jours, je n'ai pas compris pourquoi tout s'écroule. Je pensais que c'était ma faute, il s'est avéré qu'ils m'ont enlevé une de mes commodités)).


Tant pis, on s'y habituera).


ZS. Au fait, je dois dire que mon code est absolument multiplateforme. Je n'ai pas besoin de changer quoi que ce soit, sauf ce nettoyage !

 
Реter Konow:

Il n'y a pas d'erreur.

Suppression de l'initialisation automatique des tableaux avec des zéros lors de la déclaration. Pourquoi ? - inconnu. ...

Pour que nous puissions écrire des programmes rapides. L'initialisation n'est pas toujours nécessaire, le plus souvent le tableau est rempli immédiatement avec ses propres données.

 
Dmitry Fedoseev:

Afin d'être capable d'écrire des programmes rapides. L'initialisation n'est pas toujours nécessaire, le tableau est souvent rempli immédiatement avec ses propres données.

OK. Je vois.

 
Реter Konow:

... S'il y a des déchets dans ses cellules, alors les références d'une cellule à une autre dans des fonctions à différents stades de construction, font planter le programme.

Piotr, si tu as des déchets dans ton noyau, tu en es le seul responsable. MQL5, contrairement à MQL4, n'essaie pas de comprendre ce que l'utilisateur veut et c'est correct.

 
P.S. Je pense que vous auriez été beaucoup plus chanceux, Peter, si vous aviez atterri dans une sorte de forum JavaScript. Il y a beaucoup de ces délices là. Vous auriez atteint de grands sommets !
Raison: