Fonction qui renvoie 2 résultats ? - page 2

 
cameofx:

Ce qui manque dans l'explication de irusoh1 est que la variable doit être un tableau [...].

irusoh1 a raison : la variable n'a pas besoin d'être un tableau. Par exemple :

int start()
{
   int returnvalue1, returnvalue2;
   returnvalue1 = Example(returnvalue2);
   MessageBox("Example 1: " + returnvalue1 + "\r\nExample 2: " + returnvalue2);
}

int Example(int & referenceparameter)
{
   referenceparameter = 2;
   return (1);
}
 
inkexit:

Je dois renvoyer deux résultats à partir d'une seule fonction.

Si les deux résultats (ou plus) doivent être affectés à des variables, il suffit de les déclarer comme globales et de leur attribuer des valeurs dans la fonction.
 
engcomp:
Si les deux résultats (ou plus) doivent être affectés à des variables, il suffit de les déclarer comme globales et de leur attribuer des valeurs dans la fonction.
Il est considéré comme une bonne pratique de programmation de minimiser le nombre de variables globales. Il est préférable de transmettre certaines variables par référence (si plusieurs variables doivent être retournées) plutôt que de les déclarer dans une portée globale.
 
gordon:
Il est considéré comme une bonne pratique de programmation de minimiser le nombre de variables globales. Il est préférable de passer certaines variables par référence (si plusieurs variables doivent être retournées) plutôt que de les déclarer dans une portée globale.
Merci, Gordon, je ne le savais pas.
 
jjc:

irusoh1 a raison : la variable n'a pas besoin d'être un tableau. Par exemple :

Ma formulation et mon concept sont incorrects pour répondre au sujet. Néanmoins, je vois que le but du passage par référence est essentiellement la manière pratique de manipuler des tableaux par fonction.

L'utilisation d'un paramètre passé comme référence à une fonction sur des variables n'a que l'avantage pratique de modifier un nombre X de variables, plus une variable avec retour.

Alors que l'utiliser pour un tableau permet de modifier le nombre X de tableaux dans la parenthèse fois Y tailles de chaque tableau.

 

Les tableaux sont toujours passés par référence. Le problème avec les tableaux MQL est qu'ils ne peuvent pas être modifiés dans la fonction (comme le redimensionnement), seuls leurs membres le peuvent.

Cela n'a aucun sens, et limite la portée de la manipulation des tableaux.

Peut-être que cela a été corrigé dans MQL5 ?

 
irusoh1:

[...] Le problème avec les tableaux MQL est qu'ils ne peuvent pas être modifiés dans la fonction (comme le redimensionnement), seuls leurs membres le peuvent.

Vous pouvez redimensionner un tableau passé par référence à une fonction depuis l'intérieur de la fonction... Que voulez-vous dire ?
 
[...] Le problème avec les tableaux MQL est qu'ils ne peuvent pas être modifiés à l'intérieur de la fonction (comme le redimensionnement) only their members can.

@ irusoh1 : Voulez-vous dire rendre les paramètres de la fonction dynamiques ? Je ne comprends pas non plus.

Gordon : Savez-vous pourquoi on dit que les paramètres sont transmis par valeur. Les tableaux ne peuvent être transmis que par référence". Je sais comment cela se traduit dans le code mais je ne comprends pas le raisonnement. Par exemple, y a-t-il des cas dans d'autres langages où ce n'est pas le cas ? c'est-à-dire que les tableaux sont passés par valeur ou autre chose. Je ne sais pas quel serait le contraire de cette règle,

 

cameofx:

Gordon : Savez-vous pourquoi on dit que les paramètres sont transmis par valeur. Les tableaux ne peuvent être transmis que par référence". Je sais comment cela se traduit dans le code mais je ne comprends pas le raisonnement. Par exemple, y a-t-il des cas dans d'autres langages où ce n'est pas le cas ? c'est-à-dire que les tableaux sont passés par valeur ou autre chose. Je ne saurais pas quel est le contraire de cette règle,

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

Bonjour à tous

Gordon a dit : Il est considéré comme une bonne pratique de programmation de minimiser le nombre de variables globales. Il est préférable de passer certaines variables par référence (si plus d'une variable doit être retournée) plutôt que de les déclarer dans une portée globale.

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 ?

Merci

Philippe