Caractéristiques du langage mql5, subtilités et techniques - page 212

 
A100 #:

Vous vous tirez une balle dans le pied en vous déclarant privé. Vous avez limité vous-même l'accès et vous vous demanderez ensuite pourquoi le code, dans lequel les fonctions externes ont besoin d'un accès public, cesse soudainement de fonctionner.

Tout fonctionne bien pour moi et fonctionnera bien. Ce n'est pas mon affaire si vous n'utilisez pas le privé.

 
fxsaber #:

Il fonctionne bien pour moi et continuera à le faire. Ce n'est pas mon affaire si vous n'utilisez pas le privé.

Vous vous contredisez - les structures simples et le privé sont des choses incompatibles.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Particularités de mql5, trucs et astuces

fxsaber, 2021.11.17 07:53

Si vous comparez les deux fonctions, FileReadStruct ne fonctionne qu'avec des structures simples. Il s'agit d'une différence fondamentale.

Même Wikipédia le sait : les plainold data(POD) sontun type de données dans leslangages de programmation de haut niveau modernes, dont la disposition des champs en mémoire est définie de manière rigide et qui ne nécessitent pas de restrictions d'accès ni decontrôle automatique.
 
A100 #:

Vous vous contredisez en parlant de structures simples et de privé - ce sont des choses incompatibles.

Même Wikipédia le sait : les plainold data(POD) sontun type de données dans leslangages de programmation de haut niveau modernes, dont la disposition des champs en mémoire est définie de manière rigide et qui ne nécessitent pas d'accès restreint ni decontrôle automatique.

Le contexte était clair sans lire la terminologie. Simple - pas de chaînes, de tableaux dynamiques ou d'objets de classe à quelque niveau d'imbrication que ce soit.

Avec cette définition, simple peut toujours être un champ d'union.

struct MqlTick2 : private MqlTick {};

union UNION
{
  MqlTick2 Tick;
  uchar Bytes[sizeof(MqlTick2)];
};

void OnStart()
{
  UNION u;
  
  ArrayInitialize(u.Bytes, 0); // обнулили u.Tick
}
privé ne donne aucune garantie d'immuabilité de l'extérieur. Et c'est une bonne chose.
 
fxsaber #:

Le contexte était clair sans qu'il soit nécessaire de lire dans la terminologie. Simple - pas de chaînes de caractères, de tableaux dynamiques et d'objets de classe à tous les niveaux d'imbrication.

Avec cette définition, simple peut toujours être un champ d'union.

privé ne garantit pas l'immuabilité de l'extérieur. Et c'est une bonne chose.

On commence déjà à confondre l'élémentaire - l'immutabilité est const, et non privée.

 
A100 #:

Vous commencez déjà à être confus à propos de l'élémentaire - l'immutabilité est const, pas private.

Tu n'as juste pas compris ce que ça voulait dire. Peut-être que je ne l'explique pas bien. Ça n'a plus d'importance.

 
fxsaber #:

Tout fonctionne bien pour moi et continuera à le faire. Si vous n'utilisez pas le privé, cela ne me regarde pas.

Si vous utilisez {} au lieu de ZeroMemory - cela ne peut pas fonctionner parfaitement - je vous l'ai montré par un exemple concret- il n'y a pas de mise à zéro (mais vous pouvez toujours penser le contraire)

 
A100 #:

Si vous utilisez {} au lieu de ZeroMemory - cela ne peut pas fonctionner parfaitement - je vous l'ai montré par un exemple concret

Je suis juste parfaitement conscient de ce que je fais, où et pourquoi je l'applique. La particularité a été exprimée. Il n'y avait aucune envie de discuter des goûts.

 
fxsaber #:

Je suis juste parfaitement conscient de ce que je fais, où et pourquoi je l'applique. Les spécificités ont été exprimées. Il n'y avait aucune envie de discuter des goûts.

Les raisons de ne pas l'utiliser ont été exprimées en conséquence

 
A100 #:

Si vous utilisez {} au lieu de ZeroMemory - cela ne peut pas fonctionner parfaitement - je vous l'ai montré par un exemple concret- il n'y a pas de mise à zéro (mais vous pouvez toujours penser le contraire)

Pour l'union, nous n'initialisons que le premier membre, échangeons les champs et le test s'exécute.
Voyons si nous devons modifier le comportement au détriment de la vitesse pour qu'il soit conforme aux attentes de la plupart des utilisateurs.


Le dossier... est apparu lorsque la confidentialité et la constance n'existaient pas, nous n'avons pas encore pensé à changer ce comportement, car nous ne le considérons pas comme critique.

 
Ilyas #:

Le dossier... est apparu lorsque la confidentialité et la constance n'existaient pas, nous n'avons pas encore pensé à changer ce comportement, car nous ne le considérons pas comme critique.

Et il n'est pas nécessaire de modifier le comportement des fonctions existantes - il suffit d'ajouter de nouvelles fonctions appropriées (avec un préfixe/suffixe) et de déclarer les fonctions précédentes obsolètes avec un avertissement correspondant.