Fonction qui renvoie 2 résultats ? - page 3

 
gordon:
Voici une explication simplifiée -> https://www.mql5.com/en/forum/117210. Les tableaux sont toujours passés par référence dans MQL4.

Oui, merci. Mais comme je l'ai demandé, cela implique-t-il que ce n'est pas le cas dans d'autres langages ? Si c'était la seule façon de l'amener en utilisant MQ/MT4 ou une autre construction linguistique, je suppose qu'ils n'auraient pas à se donner la peine de l'énoncer.

Je suppose que je demande les "détails techniques" comme vous l'avez dit dans ce message. Juste par curiosité, pas par nécessité.

En ce qui concerne la syntaxe, le langage MQL5 pour la programmation des stratégies de trading est très similaire au langage de programmation C++, à l'exception de certaines caractéristiques :

  • pas d'arithmétique d'adresse ;
  • pas d'opérateur goto ;
  • une énumération anonyme ne peut pas être déclarée ;
  • les constructeurs de classes et de structures ne peuvent pas avoir de paramètres ;
  • pas d'héritage multiple.

Comme ça, je peux laisser entendre qu'en C++ le contraire sera vrai... Merci quand même, Gordon.

 
Matutin:

Je suis désolé, mais ce n'est pas une réponse "technique" :) Pourriez-vous dire pourquoi il est préférable de passer une variable par référence plutôt qu'une variable globale ?

Beaucoup de raisons que je préfère ne pas répéter, je vous renvoie plutôt à ici -> https://en.wikipedia.org/wiki/Global_variable et ici -> http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (vous pouvez chercher sur Google pour en savoir plus...). C'est un concept largement accepté et il y a beaucoup d'informations sur le net).

 
cameofx:

[...] cela implique-t-il que dans d'autres langues, ce n'est pas le cas ? [...]

Cela n'implique rien, mais spécifiquement en C et C++ les tableaux sont passés par référence également (techniquement un pointeur vers le premier élément du tableau est passé, ce pointeur est passé par valeur).
 
gordon:

Beaucoup de raisons que je préfère ne pas répéter, je vous renvoie plutôt à ici -> https://en.wikipedia.org/wiki/Global_variable et ici -> https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (vous pouvez chercher sur Google pour en savoir plus...). C'est un concept largement accepté et il y a beaucoup d'informations sur le net).


Très intéressant ! Malheureusement, les EA ont besoin de paramètres, et parfois beaucoup, donc nous ne pouvons pas les éviter et devons faire attention pour toutes les raisons mentionnées dans https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad.

J'utilise des règles de nommage pour les GlobalVariables : beaucoup plus facile à gérer et à éviter certains bugs.

Merci Gordon.

 
Matutin:

Très intéressant ! Malheureusement, les EA ont besoin de paramètres, et parfois beaucoup, donc on ne peut pas les éviter [...].

Les externes sont en effet inévitables. Bien qu'ils aient une portée globale, ils ne sont pas identiques aux variables globales (à ne pas confondre avec les GV) ; plus précisément, il n'est pas recommandé de modifier leur valeur via le code, et ils ne devraient donc pas être utilisés pour transmettre des informations entre les fonctions (voir ici -> https://www.mql5.com/en/forum/123535).


J'utilise des règles de nommage pour les GlobalVariable : beaucoup plus facile à gérer et à éviter certains bugs.

Cette discussion concerne les variables définies sur la portée globale (déclarées en dehors de la fonction spéciale start(), init(), deinit()) et non les GV's... Ne mélangez pas les deux.
 

Simple curiosité : existe-t-il des langages de programmation dont les fonctions renvoient plusieurs résultats ?

 

on pourrait peut-être faire en sorte qu'une fonction renvoie deux valeurs en les combinant de manière à pouvoir les décombiner à nouveau dans la fonction appelante

quelque chose comme ceci

a = 10 ;

b = 20 ;

a = a*1000

c = a+b // 10020

return(c) ;

puis dans la fonction d'appel

b = c%1000 // 20

a = c-b/1000 // 10

 
SDC:

on pourrait peut-être faire en sorte qu'une fonction renvoie deux valeurs en les combinant de manière à pouvoir les décombiner à nouveau dans la fonction appelante

quelque chose comme ceci

[...]
Peut-être pas.
 

Pourquoi pas ?

 
SDC:

Pourquoi pas ?

Pourquoi résoudre un problème qui n'existe pas ? Pourquoi réinventer la roue ? Pourquoi inventer un code peu clair qui ne fonctionnerait que dans des cas limités ?
Raison: