2つの結果を返す関数? - ページ 2

 
cameofx:

irusoh1の説明で抜けているのは、変数がArray(s) [...]である必要があることです。

irusoh1の言うとおり、変数は配列である必要はない。例えば

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:

1つの関数から2つの結果を返す必要があります。

もし、2つ以上の結果を変数に代入するのであれば、グローバル変数として宣言し、関数 内で変数に値を代入すればよいでしょう。
 
engcomp:
2つ(またはそれ以上)の結果を変数に代入する場合は、グローバル変数として宣言し、関数の中で値を代入すればよい。
グローバル変数の 数を最小限にすることは、良いプログラミングの実践と考えられています。グローバルスコープで宣言するよりも、(複数の変数を返す必要がある場合は)いくつかの変数を参照渡しにしたほうがよいでしょう。
 
gordon:
グローバル変数の数を最小限にすることは、プログラミングの良い習慣と考えられています。いくつかの変数は、グローバルスコープで宣言するよりも、(複数の変数を返す必要がある場合は)参照渡しする方がよいでしょう。
Gordonさん、ありがとうございます。
 
jjc:

irusoh1の言うとおり、変数は配列である必要はない。例えば

私の言い回しや考え方は、このトピックに対する答えとしては間違っています。でも、参照渡しの目的は、要するに関数で Array(s)を操作するための実用的な方法なんですね。

パラメータを参照関数として変数に渡すと、X個の変数を変更し、さらにreturnで1つの変数を変更するという実用性があるだけです。

一方、Arrayに使うと、括弧内のX個のArrayと各ArrayのY個のサイズを変更することができます。

 

配列は常に参照渡しです。MQLの配列の問題は、関数 内で変更できないことです(resizeのように)メンバーだけが変更できます。

これは意味がなく、配列操作の範囲が制限されます。

多分、MQL5で修正されたのでは?

 
irusoh1:

[MQLの配列の問題点は、関数内で変更できないことです(resizeのように)メンバーだけが変更可能です。

関数に 参照渡しされた配列は、関数内部でリサイズできます 。どういう意味ですか?
 
[...] MQLの配列の問題は、関数内部で変更できないことです(resizeのように) only their members can.

@ irusoh1 :関数の パラメータを動的にするということですか? 私もよくわからないわ。

Gordon : なぜ「パラメータは値で渡される」と言われるか知ってる?配列は参照で渡すしかないんだ。コード上ではどうなるかはわかるんだけど、その理由がわからないんだ。例えば、他の言語ではそうでない場合があるのだろうか?そのルールの逆はどうなるのか、、、。

 

cameofx:

Gordon : なぜ、「パラメータは値で渡す。配列は参照で渡すしかないんだ。コード上ではどうなるかは分かるんだけど、その理由が分からないんだ。例えば、他の言語ではそうでない場合があるのだろうか?そのルールの反対はどうなるのか、、、、。

以下、簡略化して説明します→https://www.mql5.com/en/forum/117210。 MQL4では、配列は常に参照渡しです。
 

皆さん、こんにちは

Gordon said : グローバル変数の数を 最小限にすることは、良いプログラミングの実践と考えられています。グローバルスコープで宣言するよりも、(複数の変数を返す必要がある場合は)参照渡しの方が良い。

申し訳ありませんが、「技術的」な回答ではありません :) グローバル変数ではなく、参照で変数を渡す方が良い理由を教えてください。

ありがとうございます。

フィリップ