MQL5の未来はMQL5+、あるいはMQL6だ - ページ 9

 

Mihail Matkovskij:

迂回することは可能ですが、他の最新カーネルではそのような問題はないのに、なぜなのでしょうか?

他の現代語は違うやり方をしている。例えば、Javaではグローバル変数や定数は存在せず、代わりに宣言されたクラスの静的変 数を使用することができる。しかし、ポイントは変わりません。なぜなら、異なるクラスで重複する静的変数名を指定した場合、コンパイラはそれが属するパッケージ名とクラス名を明らかにするよう求めるからです。コンパイルプロセスにはテレパシー能力がありませんから。授業も同様です。異なるパッケージで重複しているクラス名やインターフェース名を指定した場合、コンパイラは再度パッケージ名を指定するように要求します。
 
Mihail Matkovskij:

致命的なエラーではないものの、やはり不便を感じる。

エラーというより、通知ですね。言語によっては、この種の通知すらないものもあります。ローカルスコープの何かが、より上位のものと重なったのだから、それはそれでいいのだ。そういう意図で作られたものです。しかし、このような警告がむしろ有効な場合もあるのです。

例えば、MQLでは、グローバル 変数は関係なく、私が推奨する使わないというのも関係ありません。

複数のスコープを作成する。

int OnInit()
  {
        int i = 10;
        {
                int i =5;
                {
                        int i = 0;
                }
        }
   return(INIT_SUCCEEDED);
  }

そしてなんと、2つの警告が表示されるのです。

declaration of 'i' hides local declaration at line 3    
declaration of 'i' hides local declaration at line 5    

それゆえ、結論は--。

1) そのような警告を無視する
2)下/上の視認性領域で同じ名前を使用しない
3) サービスデスクに、この通知は役に立たないとして削除するよう説得する。

 
Igor Volodin:

3) サービスデスクに、この通知は役に立たないとして削除するよう説得する。

もし、すべてのバカがサービスデスクに、自分たちの観点からは役に立たないから、このルールやこのルールを削除するように説得するなら、言語はすぐに原始的なゴミに堕落してしまうだろう。

 
Mihail Matkovskij:

というか、作れないわけがない。どんなプログラミング言語でも、グローバル変数は自由に使えるのでいいのですが、ここではコンパイラに悪態をつかれます。致命的なエラーではないものの、不便を感じることはあります。

可変ポイントは、1ポイントの価格を報告し、標準ポイントの代用となるものです。MarketInfo(EA_Symbol(), MODE_POINT)関数は、任意のシンボルの1ポイント分の価格を表示します。さらに、変数pointは、もちろんグローバル変数であれば、EA本体で、どの関数でも使用することができます。このようなケースで不都合が生じることはよくあることだと思います(MQLプログラミングの経験がある方であれば)。そして、それらは避けることができるのですが、問題は、他の現代言語にはそのような問題がないにもかかわらず、なぜなのか、ということです。

変数ポイントは、グローバル変数に することはできません。これは、シンボルによってポイント価格が異なるためです(ただし、原則的にポイント価格は一致しています)。その結果、ピップ値は特定のシンボルで取引される特定のEA内でのみ計算でき、それ以外の方法では計算できません。
 

残念ながら、このような警告の有用性と重要性を理解しているのは、経験豊富なプログラマーだけである。

まあ、皆さんもこの程度のコンパイラの助けは喜んで、自分でエラーを修正することをお勧めします。これらは実際に起こりうるエラーの場所であり、初心者の開発者にとってはまさに学ぶことが決定的に重要なのです。

 

配色を希望します。エディターだけでなく、他のウィンドウでも、文字や背景色を変更できるようにしました。

クラスメンバーデータは、名前が一致している場合、インスタンス変数の色で着色してはならない。

 

すでに何度か、一日の仕事を終えてプログラムウィンドウやブラウザなどを閉じるときに、誤って最適化 モードで動作しているMT5ターミナルも閉じてしまったことがあるんだ。したがって、すべての結果は失われた。端末を再起動すると、すべてやり直しになります。

多くのプログラムでは、ウィンドウを閉じようとクリックすると、本当に閉じてよいかどうか尋ねられ、未保存のデータが失われることがあります。

端末が最適化されている場合は、このようにするとよいでしょう。

 
Igor Volodin:

エラーというより、通知ですね。言語によっては、この種の通知がないものもあります。ローカルエリアの何かが上位の何かと重なったから、いいや。そういう意図で作られたものです。しかし、このような警告がむしろ有効な場合もあるのです。

例えば、MQLでは、グローバル 変数は関係なく、私が推奨する使わないというのも関係ありません。

複数のスコープを作成する。

そしてなんと、2つの警告が表示されるのです。

それゆえ、結論はこうだ。

1) そのような警告を無視する
2)下/上の可視領域で同じ名前を作らない
3) この通知は役に立たないとして削除するよう、servicedeskを説得する。

1つのスコープに同じ名前の変数が2つあるのは良くないことで、プログラマなら誰でも知っていることです。しかし、問題はこの範囲が、普通のプログラマーが自分を開発者とは思っていないため、手を加えないような標準的なモジュールを対象としていることである。警告を消すという選択肢もない。また、注意を怠ると、重要な警告に気づかないこともあり、本当に不便です。

私は、この問題を解決するために2つの方法を考えています。

1.プラグインが明示的に指定されていない場合は、プラグインプログラムを表示しないようにする

2.もし開発者が構文の変更を望まないのであれば、関数におけるパラメータの宣言に、クラスフィールドと同様のルールを導入する。例えば、パラメータ名はiまたはi_(アルファベット入力から)で始まるものとし、標準モジュールにおけるすべてのパラメータを固定化する。

 

コンパイラは正しく動作し、これらの警告は例外なく正しい。

解決策はただ一つ、変数の重複を避け、間違いを犯す権利を保持しようとせず、その権利を尊重するよう他の人に要求することです。

 
Renat Fatkhullin:

コンパイラは正しく動作し、これらの警告は例外なく正しい。

それは、可変のオーバーラップを許さないこと、そして、間違いを犯す権利を維持するために、他の人たちにその権利を尊重することを要求しないことです。

おそらく誤解されているのでしょう。私は誰かに何かを要求しているわけではなく、MQLをより使いやすくするためのアドバイスをしているだけなのです。