MQL5言語をゼロから独学で学ぶ - ページ 44

 
Vladimir Simakov:

グローバルオブジェクトは、デフォルトのコンストラクタで初期化さ れます。ただし、スタック上に確保されたメモリ(読み出し変数)については、初期化されない。そのため、グローバル変数は初期化されないことがありますが、この場合、ゼロになることを覚えておいてください。しかし、初期化されていない(同時に、自分が何をしているのか正確に分かっていない限り、コンパイラが生成する警告を すぐに避けることに慣れる)ことは、初期化されていない変数を読むと未定義の動作につながるため、深刻な問題である。例えば、このコードはリリースビルドとデバッグビルドで挙動が異なり、コンパイラのバージョンや最適化の設定を変更したときに、その挙動も変化しないとは誰も保証できません。

ウラジミールさん、こんにちは!分かりやすい説明ありがとうございます。

敬具 ウラジミール

 
MrBrooklin:

Peterグローバル変数について ですが、グローバル変数が事前に定義されている必要があるという文献はまだ見当たりませんね。この件に関する知識を深めるために、ソースへのリンクをお持ちですか?MQL5リファレンスには、初期化に関する明示的な言及は ありません。

bool型は 真偽 値を格納するために設計されて おり、 その数値表現はそれぞれ 1 または 0 である。

bool a =true;
bool b =false;
bool c =1;

内部表現は1バイトの整数値である。なお、boolean式では、boolの代わりに他の整数型や実数型、またはそれらの式を用いても、コンパイラはエラーを発生させない。この場合、0はfalse、それ以外はtrueと解釈される。

ウラジミールさん、ありがとうございます。
少なくとも慣れるまでは、明示的にグローバル変数を初期化することが望ましい。繰り返しになりますが、mql4では関数内で変数や配列を初期化することは一切できませんが、mql5ではそれが義務付けられており、さもなければ変数に「ゴミ」がついてしまいます。
 

スクリプトのコードに追加しておきました。

//--- Зададим глобальные переменные:
//переменная enough_time (достаточно времени), где bool - логическое значение: истина (true) или ложь (false)
bool enough_time=false;
//переменная enough_patience (достаточно терпения), где bool - логическое значение: истина (true) или ложь (false)
bool enough_patience=false;

このスクリプトのコメントには、なぜbool データ型の 定義済み値がtrueではなく falseに なるのかが、プログラミングスクールの1年生にもわかるようにはっきりと書かれています。

ウラジミールさん、ありがとうございます。

 
MrBrooklin:

スクリプトコードに追加しました。

ウラジミールさん、謹んで申し上げます。

他に文句を言うことはない。:)
 
MrBrooklin:

私はプログラミング言語MQL 5の勉強を続けており、このスレッドの参加者からあるタスクの続きであるスクリプトのコードを投稿しています。スクリプトはすべてのモードでテストされています。特に問題はありませんでした。最小限の入力パラメータ数で開始するように適用した。スクリプトのコードは英語で書かれていますが、コードへのコメントはロシア語で書かれており、学習しやすいように配慮されています。先に約束したように、このスクリプトはプログラミングスクールの1stフォームの生徒にも理解できるように記述したつもりです。

ウラジミールさん、よろしくお願いします。

ウラジミール そのような書き方はしない方がいい。外部変数に対する関数の働きを短絡させないこと。これまでのところ、あなたにとっての唯一の例外は、入力変数 から値を取ることです。
 
Vasiliy Sokolov:
ウラジミール そのような書き方はしない方がいい。外部変数に関数をロックしないでください。これまでのところ、あなたにとっての唯一の例外は、入力変数 から値を取ることです。

Vasilyさん、こんにちは。正直、太字になっている部分の意味がよく分かりませんでした。どういう意味なのか、詳しく教えてください。

敬具 ウラジミール

 
MrBrooklin:

Vasilyさん、こんにちは。正直なところ、太字で書かれていることの意味がよく分かりませんでした。どういう意味なのか、詳しく教えてください。

敬具 ウラジミール

グローバル 変数は使わないでください。なぜ使ってはいけないのかは、後ほど書きます。
 
Vasiliy Sokolov:
グローバル 変数は使わないでください。なぜ使っては いけないかは、後で書きます。

これには、いい逸話がある。

- 質問:C++でグローバル変数に最適な型は何ですか?

- 答え: //

 
Vasiliy Sokolov:
グローバル 変数は使用しないでください。なぜ使ってはいけないのかは、後で書きます。

今ならわかる。ありがとうございます。グローバル変数が使えない理由を教えてもらうのを待ちます。

ウラジミールさん、ありがとうございます。

 
OOPプログラミングへの移行までの段階では、グローバル変数の使用は十分に正当化され、そこから目を背ける理由はない。番組内のどこでも使える便利なものです。なぜ使ってはいけないのでしょうか?イミフ。