エラー、バグ、質問 - ページ 1332

 
Alexey Navoykov:
同じ名前をわざと つけることはありません。 ローカルな関数コードは、外部プログラムとは別の人生を歩んでいます。 また、外部変数の名前は時間と共に変化し、新しい外部変数が追加されることもあります。その後、突然、何百もの関数のうちの1つが同じ名前のローカル変数 を持っていたら、グローバル変数の 名前をどう変えるべきだと思いますか? 開発者のバグに言い訳を探すべきではありません。

開発者のバグの言い訳をしたいわけではないのですが、このバグは、プロジェクトで作業するときに入力パラメータを担当する変数名を同じにしないことで、簡単に回避することができるのです。入力パラメータの名前を変更するだけです。入力パラメータに何百もの変数があり、すべてのコードを編集する必要があるとは思えません :) コードの主要部分は通常ソフトウェアのエントリポイントで書かれ、それほど大きくはありません。また、関数(メソッド)に対しては、入力パラメータにどのような変数名が渡されるかに違いはない。

もちろん、関数がグローバル変数を使うようなコードを書けば、もちろんいろいろと変更しなければならないのですが、このコードはまったくビジョンがなく書かれているので、本当にモダナイズが難しいのです。

開発者(MetaQuotes)を消費者の立場で見れば、もちろん、一度にたくさんのものが欲しいわけですが :) 私はクロスプラットフォームの端末で仕事をしたいのですが、この要望に対する答えは、「あるものを使うか、それを通り越すか」のどちらかでしょうね :)

 
Konstantin Karpov:

入力パラメータの名前を変えるだけで...。

ある種、ノリノリなんですね。そうすると、ローカル変数 名が一致する別の関数が追加されて、また変更しなければならないでしょ? 外部変数名は、単なる文字の羅列ではなく、特定の意味を持つんだ。また、プリセット設定やテスター、オプティマイザーの設定も、名前を変更するとこのパラメーターの設定はすべて失われます。

例えば、あなたが外部から関数を挿入したとします。おそらく、あなたが書いたものではないのでしょう。

 
Alexey Navoykov:

ある種、ノリノリなんですね。その後、ローカル変数が 同じ名前の他の関数が追加され、また変更しなければなりませんよね。 外部変数の名前は単なる文字の羅列ではなく、特定の意味を持っています。一生懸命考えて、簡潔な名前を探して、それを変えろと言っている場合もあります。 また、名前を変えると、プリセット設定や、テスター、オプティマイザーの設定もすべてこのパラメーターから失われます。

例えば、外部から関数を挿入した場合、その関数は自分が書いたものではありませんから、ローカル変数の 名前は何でもいいことになります。

適当にやってください。でも、大きなプロジェクトは書いていないようですね。

グローバル変数名とローカル変数名の宣言スタイルが明確に分かれているので、自分の関数定義を見ても意味がない。そのため、グローバル変数名とローカル変数名が一致するような問題は発生しません。重要なのは、関数が衝突することなく論理を展開することです。グローバル変数名と ローカル変数名を一致させると、びっくりすることになりますが、これはすでに解決済みです。

例えば、_iCountのように、ローカル変数名に余計な_を付ける。この場合、変数名に関する問題は発生しません。なぜなら、2回目に説明しようとしたこと、つまり変数はローカルスコープに存在し、そこで作成されるからです。また、この場合、グローバル変数がなくても、名前に曖昧さが生じることはありません。そして、この時点で議論を終了しましょう。

 

前回の 記事に戻ります。MT4/845、Windows7/64bit、スクリプト。

#property strict

double d1 = 2.009745110811111111111111111;
double d2 = 3.654;
double d3;
//---
void OnStart()
  {
   d3=d1/d2;
   Print("AA: d3 = ",d3);
   Print("BB: d3 = ",DoubleToString(d3));
   Print("CC: d3 = ",DoubleToString(d3,8));
   Print("DD: d3 = ",DoubleToString(d3,9));
   Print("EE: d3 = ",DoubleToString(d3,10));
}

結果


管理、DoubleToStringに この関数が浮動小数点数を指定された精度に 丸めることを追加します。

 

ローカル変数と入力変数の名前を同じにしないのは良いアイデアです

 
Комбинатор:

ローカル変数と入力変数の名前を同じにしないのは良いアイデアです

いい意味でそうなんですが、他人のコードを修正して、自分のライブラリを接続して......ということがあります。ドン
 

添付ファイルのMEにある行をスペースなしで続けてみてください。

ファイル:
comment.mq5  1 kb
 
議論するときに、マーケットにある製品にリンクしてもいいのでしょうか?それとも広告とみなされ、禁止されるのでしょうか?
 
Yousufkhodja Sultonov:
議論するときに、マーケットにある製品にリンクしてもいいのでしょうか?それとも広告とみなされ、禁止されるのでしょうか?
各製品には、「ディスカッション」(購入を検討されている方向け)と「レビュー」(購入された方向け)の2つのタブがあります。ここでは、製品に関する議論が行われます。
 

演算子の後のコンパイル結果に疑問がある ?:

int f()
{
        int array[];
        return ( false ? array : array );
}
void OnStart()
{
        Print( f() );
}
// 0 error(s), 0 warning(s)
結果: 65618 (どうしてこうなった?)、コンパイル時エラーが発生するはずです。