Questions des débutants MQL5 MT5 MetaTrader 5 - page 1334

 
Artyom Trishkin:
C'est Alexey qui a refait quelque chose dans le code que j'ai donné. Ou peut-être l'ai-je sous-estimé - je l'ai écrit "à genoux" comme un simple exemple pour clarifier ce dont je ne me souviens plus.

Peut-être qu'Alexei pourra nous le dire.)

 
Valeriy Yastremskiy:

L'itération du cycle ne se terminera pas et n'en commencera pas une nouvelle, mais passera à la suivante. La logique va changer.

Non. La condition est fixée à l'origine de sorte que si le pointeur est créé avec succès, il est ajouté à la liste. La parenthèse de la courbe est fermée et en cas d'échec, l'addition ne sera pas exécutée. La logique est un peu différente avec l'opérateur continue, mais le résultat est le même.
 

Artyom Trishkin:
Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.

//+------------------------------------------------------------------+
//| CNewBar Time Возвращает время нулевого бара                      |
//+------------------------------------------------------------------+
datetime CNewBar::Time(void)
  {
   datetime array[1], ret;
   ret = CopyTime(this.m_symbol, this.m_timeframe, 0, 1, array) == 1 ? array[0] : 0;
   return(array[0]);
 }
//+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar(void)
  {
   datetime tm = this.Time();
   if(tm == 0)
      return false;
   if(tm != this.m_time)
     {
      this.m_time = tm;
      return true;
     }
   return false;
  }


Artem, pourquoi le mot clé this est-il utilisé ici ? Sans lui, les méthodes fonctionneront avec les membres de la classe...

 
Mikhail Tkachev:

Alexey, merci pour cette réponse si détaillée.
Le but de la variable ret dans le fragment de code donné n'est pas clair...
Pourquoi est-il calculé si la méthode renvoie un tableau[0] de toute façon ?
P.S.
Et pourquoi utiliser cette méthode dans une classe? Nous travaillons avec les membres de cette classe particulière...


  1. Comme la fonction CopyTime retourne une valeur, laissez-la retourner dans une variable, cela n'empirera pas la situation... En cas de débogage, vous pouvez vérifier ce que vous avez obtenu.
  2. ceci a été écrit par Artyom. Apparemment, il s'agit de préférences personnelles. Certains l'écrivent s'ils le veulent ou ne le veulent pas : :
ps ; Je viens de remarquer que le type de variable ret datetime... Bien sûr, il devrait être de type int. Oh bien, je vais devoir réparer ça aussi...
 
Alexey Viktorov:
  1. Puisque la fonction CopyTime retourne une valeur, laissez-la retourner à une variable, cela n'empirera pas la situation... En cas de débogage, vous pouvez vérifier ce que vous avez.
  2. ceci a été écrit par Artyom. Apparemment, il s'agit de préférences personnelles. Certaines personnes, il est nécessaire - pas nécessaire d'écrire : :

1. A quoi sert la fonction CopyTime ici ?

2. Peut-être qu'Artem répondra à ce sujet - est-ce une préférence personnelle ou est-ce nécessaire ?

 
Mikhail Tkachev:

1. A quoi sert la fonction CopyTime?

2. Peut-être qu'Artem répondra à cette question - est-ce une préférence personnelle ou est-ce nécessaire ?

Si vous n'aimez pas CopyTime(), remplacez-le par iTime(). Il n'y a pas de différence, l'essentiel est d'obtenir l'heure de la barre actuelle.

Dans ma tête, je me rappelle vaguement quand il a été écrit. Je crois que j'ai aussi posé cette question... Et si je ne me trompe pas, cela permet de s'assurer que la référence ne concerne que les méthodes locales au cas où il y en aurait des similaires dans d'autres classes. Et bien sûr, Artyom va clarifier.

 
Alexey Viktorov:
Non. La condition est initialement définie comme suit : si le pointeur est créé avec succès, il est ajouté à la liste. Le support de la courbe est fermé et en cas d'échec, l'addition ne sera pas exécutée. La logique est un peu différente avec l'opérateur continue mais le résultat est le même.

Oui, le résultat est le même, l'intérieur est différent. Je pense que c'est plus rapide avec la suite, bien que ce soit la couleur et la logique .....

 
Mikhail Tkachev:


Artem, pourquoi le mot clé this est-il utilisé ici ? Parce que même sans lui, les méthodes fonctionneront avec les membres de la classe...

Ils le feront. Je l'utilise parce que je veux qu'ils le fassent :) Il indique explicitement quelles méthodes de classe sont utilisées.

Si vous avez deux classes, l'une en tant que parent et l'autre en tant que descendant, et que vous avez deux méthodes portant le même nom, mais qui ne sont pas virtuelles pour une raison quelconque, vous devez spécifier explicitement laquelle utiliser.

Supposons que la classe parent est CParent et que la classe héritée est CInheritedet qu'elles ont toutes deux la méthode Method().

Dans ce cas, si nous appelons une méthode Method() d'une classe CParent, elle appellera explicitement une méthode de la classe CParent - ce qui n'est pas nécessaire ici. On peut appeler la méthode avec ou sans elle.

Si nousappelons une méthodeMethod() dans une classe héritée CInherited, la méthodede cette classe sera également appelée, puisque nous cherchons d'abord une méthode appartenant à la classe à partir de laquelle nous l'avons appelée.

Si nousappelons CParent::Method() dans une classe CInherited, c'est la méthode de la classe parente qui sera appelée de cette façon, car nous avons explicitement spécifié une méthode qui appartient à la classe parente par l'opérateur de résolution de contexte.

Mais quand même, j'appellerais la méthode Method() dans une classe héritée CInherited avec this - pour être sûr que cette (this == "this") classe héritée serait appelée.

Il y a d'autres explications à cette utilisation. Peut-être que quelqu'un de plus expérimenté en matière de POO pourra nous renseigner.

 
Valeriy Yastremskiy:

Oui, le résultat est le même, l'intérieur est différent. Je pense que c'est plus rapide avec la suite, bien que ce soit la couleur et la logique .....

Il ne devrait pas y avoir de différence. C'est simplement plus agréable à regarder - moins de parenthèses et d'indentations.

 
Alexey Viktorov:
  1. Puisque la fonction CopyTime retourne une valeur, laissez-la retourner dans une variable, cela n'empirera pas la situation... En cas de débogage, vous pouvez vérifier ce que vous avez.
  2. ceci a été écrit par Artyom. Apparemment, il s'agit de préférences personnelles. Certains l'écrivent, ils n'en ont pas besoin : :
ps ; Je viens de remarquer que le type de variable ret datetime... Bien sûr, il devrait être de type int. Mais tant pis, je vais devoir le réparer aussi...

Eh bien, oui. Je fais partie de ces "certains", en particulier, lorsque j'appelle une fonction standard depuis une classe, je spécifie toujours le contexte global. Tout simplement parce que je peux penser à écrire dans cette classe une méthode portant le même nom que la fonction standard - afin de ne jamais oublier ce qu'elle fait. Et c'est là que : : est utile pour appeler la fonction standard et ceci est utile pour appeler ma méthode du même nom.