Contents
演算子
オペレータの任期
任意のプログラミング言語の重要な概念の1つは、 オペレータの 用語 です。 この言葉を完全に習得していない人にとっては、コーディングは不可能と思われます。 プログラマは、どんな演算子がどのようなもので、どのようにプログラムに適用されるのかをすぐに知ると、プログラマが自分のプログラムを書くのが早くなります。
演算子 はプログラムの一部です。 それはデータ変換の方法を規定するアルゴリズム言語の句である。
どのプログラムにも演算子が含まれています。 演算子に最も近い類推は文です。 通常の文章がストーリーのテキストを構成するのと同じように、演算子はプログラムを構成します。
演算子のプロパティ
演算子のプロパティには、共通のプロパティと、異なる演算子の特定のプロパティの2種類があります。
演算子の共通プロパティ
すべての演算子は1つの共通プロパティを持ちます。 彼らはすべて実行されます。
オペレータは操作のガイド(注文の説明)を含む指示であると言うことができます。 コンピュータでは、実行中のプログラムを実行することは、オペレータに含まれる注文(処方箋、指示)に従いながら、あるオペレータから別のオペレータに連続的に渡ることを意味する。
演算子は単なるレコードであり、特定の文字シーケンスです。 オペレータには、レバー、ワイヤ、またはメモリセルはありません。 これは、コンピュータがプログラムを実行しているときに、オペレータに何も起こらず、プログラマによって構成されたプログラムにとどまっている理由です。 しかし、これらのメモリセルとセル間のリンクをすべて備えたコンピュータは、内部のすべての変換を経験します。 あなたのPCが、オペレータに含まれている指示に従ってデータのいくつかの変換を実行した場合は、そのオペレータが実行されたと言います。
オペレータの特定のプロパティ
演算子にはいくつかの種類があります。 それぞれのタイプの演算子は、それぞれ固有のプロパティを持っています。 例えば、代入演算子のプロパティは、与えられた変数にある値を代入する能力です。 ループ演算子のプロパティは複数回実行されます。 オペレータの特定のプロパティは、このマニュアルのオペレータに関する章の対応するセクションで詳細に検討されています。 ここでは、すべてのタイプの演算子が、その型に対して典型的なものであり、他の型で繰り返されない独自のプロパティを持っているとしか言いません。
演算子の種類
演算子には、単純演算子と複合語の2種類があります。
単純演算子
MQL4の単純な演算子は、文字 ";"で終了します。 (セミコロン)。 このセパレータを使用すると、PCは、オペレータがどこで終了し、どこかが開始する場所を検出できます。 セミコロンは、通常の文章では文を区切るための期間が必要であるため、必要に応じてプログラム内にあります。 1人のオペレータは複数の行を取ることができる。 複数の演算子を1行に入れることができます。
すべての単純な演算子は、文字「;」で終わります。 (セミコロン)。 |
簡単な演算子の例を次に示します。
1 2 3 4 5 6 7 8 |
<span class="notranslate"> Day_Next = TimeDayOfWeek(Mas_Big [n] [ <span class="number">0</span> ] + <span class="number">60</span> );</span> <span class="notranslate"> <span class="comment">//単純演算子</span></span> <span class="notranslate"> Go_My_Function_ind();</span> <span class="notranslate"> <span class="comment">//単純演算子</span></span> <span class="notranslate"> a = <span class="number">3</span> ;</span> <span class="notranslate"> b = a * x + n;</span> <span class="notranslate">私は+ +;</span> <span class="notranslate"> <span class="comment">//行内の複数の演算子</span></span> <span class="notranslate"> <span class="functions">Print</span> ( <span class="string">"Day ="</span> 、TimeDay(Mas_Big [s] [ <span class="number">0</span> ])、 <span class="comment">// 1つの演算子..</span></span> <span class="notranslate"> <span class="string">"Hour ="</span> 、TimeHour(Mas_Big [s] [ <span class="number">0</span> ])、 <span class="comment">//が</span>見つかり<span class="comment">ました。</span></span> <span class="notranslate"> <span class="string">"Minute ="</span> 、TimeMinute(Mas_Big [s] [ <span class="number">0</span> ])、 <span class="comment">//複数の..</span></span> <span class="notranslate"> <span class="string">"Mas_Big [s] [0] ="</span> 、Mas_Big [s] [ <span class="number">0</span> ]、 <span class="comment">// lines</span></span> <span class="notranslate"> <span class="string">"Mas_Big [s] [1] ="</span> 、Mas_Big [s] [ <span class="number">1</span> ]);</span> |
化合物オペレーター(化合物)
複合演算子は、文字「;」で区切られたいくつかの単純な演算子で構成されます。 中括弧で囲まれています。 プログラマは、複合演算子を使用します(「ブロック」または「コードブロック」とも呼ばれます)。複数の演算子を使用できるようにするには、コンパイラ演算子を使用します。 コンパウンド内の演算子のリストは、中括弧で区切られています。 閉じ括弧の存在は複合演算子の終了を示します。
条件付き演算子での化合物の使用例を次に示します。 条件式演算子で始まり、(式)に続いて複合語が続く場合。 複合演算子には、実行可能演算子のリストが含まれています。 |
図17 複合演算子。
複合演算子の本体は中かっこで囲まれています。 すべての複合演算子は閉じた中かっこで終わります。 |
複合演算子の例を次に示します。
1 |
<span class="notranslate"> <span class="comment">//オペレータスイッチの</span> <span class="keyword">切り替え</span> <span class="comment">例</span> (ii) <span class="comment">//オペレータスイッチ(式)</span> { <span class="comment">//ブレス</span> <span class="keyword">ケース</span> <span class="number">1の</span> <span class="comment">開き</span> :Buf_1 [Pok-f + i] = Prognoz;</span> <span class="notranslate"> <span class="keyword">休憩</span> 。</span> <span class="notranslate"> <span class="comment">//入れ子演算子(演算子本体)</span> <span class="keyword">ケース</span> <span class="number">2</span> :Buf_2 [Pok-f + i] = Prognoz;</span> <span class="notranslate"> <span class="keyword">休憩</span> 。</span> <span class="notranslate"> <span class="comment">//入れ子演算子(演算子体)</span> <span class="keyword">ケース</span> <span class="number">3</span> :Buf_3 [Pok-f + i] = Prognoz;</span> <span class="notranslate"> <span class="keyword">休憩</span> 。</span> <span class="notranslate"> <span class="comment">//入れ子の演算子(演算子の本体)</span> } <span class="comment">//閉じた中括弧、..</span> <span class="comment">//は複合演算子の終わりを示し</span> <span class="comment">ます// ---------------------- -------------------------------------------------- -----------------</span> <span class="comment">//ループの使用例</span> (tt = <span class="number">1</span> ; tt <= Kol_Point [ <span class="number">7</span> ]; tt ++) <span class="comment">//演算子for(expressions)</span> { <span class="comment">// Openingブレース</span> Numb = Numb + Y_raz [tt] * X_raz [ii] [tt];</span> <span class="notranslate"> <span class="comment">//入れ子演算子(演算子本体)</span> } <span class="comment">//中括弧を閉じる..</span> <span class="comment">// ...は複合演算子が終了する場所を示し</span> <span class="comment">ます// ----------------------- -------------------------------------------------- ----------------</span> <span class="comment">//</span> <span class="keyword">if</span> (TimeDay(Mas_Big [f] [ <span class="number">0</span> ])!= <span class="number">6</span> ) <span class="comment">// if(expression)</span> { <span class="comment">//オープニングブレース</span> Sred =(Nabor_Koef [ii] [vv] [ <span class="number">2</span> ] + NBh)* <span class="functions">Point</span> ;</span> <span class="notranslate"> <span class="comment">//入れ子の演算子(演算子の本体)</span> Ind = Nabor_Koef [ii] [vv] [ <span class="number">0</span> ] + f;</span> <span class="notranslate"> <span class="comment">//入れ子の演算子(演算子の本体)</span> <span class="functions">Print</span> ( <span class="string">"Ind ="</span> 、Ind);</span> <span class="notranslate"> <span class="comment">//入れ子演算子(演算子本体)</span> } <span class="comment">//中括弧を閉じる</span> <span class="comment">// ...は複合演算子が終了する場所を示し</span> <span class="comment">ます</span></span> |
化合物の本体は常に中かっこで囲まれ、ゼロ、1つ、または複数の演算子で構成されます。 |
単純な演算子の例を次に示します。
1 2 3 4 5 6 7 8 9 10 11 |
<span class="notranslate"> <span class="comment">// ------------------------------------------------ ----------------------------------</span></span> <span class="notranslate"> <span class="comment">//演算子の例</span></span> <span class="notranslate"> <span class="keyword">for</span> (n = <span class="number">1</span> ; n <= Numb; n ++) <span class="comment">// for(式)</span></span> <span class="notranslate"> Mas [n] = Const_1 + n * Pi;</span> <span class="notranslate"> <span class="comment">//入れ子の演算子(演算子の本体)</span></span> <span class="notranslate"> <span class="comment">// ------------------------------------------------ ----------------------------------</span></span> <span class="notranslate"> <span class="comment">//条件付き演算子の例if</span></span> <span class="notranslate"> <span class="keyword">if</span> (Table> Chair) <span class="comment">// if(expression)</span></span> <span class="notranslate">ノルマ= <span class="keyword">真</span> ;</span> <span class="notranslate"> <span class="comment">//最初の演算子(サブ演算子1)</span></span> <span class="notranslate"> <span class="keyword">else</span> <span class="comment">// Else-condition</span></span> <span class="notranslate">ノーマ= <span class="keyword">偽</span> ;</span> <span class="notranslate"> <span class="comment">//第2演算子(サブ演算子2)</span></span> <span class="notranslate"> <span class="comment">// ------------------------------------------------ ----------------------------------</span></span> |
いくつかの単純な演算子は、厳密な必要性なしに複合演算子で組み合わせることができます。 |
次の例はまれな構造ですが、絶対に受け入れられます。 この場合、中括弧で囲まれた演算子は「演算子のブロック」と呼ばれます。 この使用は完全に許容可能です。 プログラマは、オペレータを中括弧で囲むかどうかを決定します。便利なコード表現のためだけです。
1 2 3 4 |
<span class="notranslate"> { <span class="comment">//オープニングブレース</span></span> <span class="notranslate"> Day_Next = TimeDayOfWeek(Mas_Big [n] [ <span class="number">0</span> ] + <span class="number">60</span> );</span> <span class="notranslate"> <span class="comment">//単純演算子</span></span> <span class="notranslate"> b = a * x + n;</span> <span class="notranslate"> <span class="comment">//単純演算子</span></span> <span class="notranslate"> } <span class="comment">//中括弧を閉じる..</span></span> |
要件 'for'演算子
演算子は、書式規則(コード内の表現方法)に従って、プログラムのテキストで記述する必要があります。 これらの規則を超えて演算子を構成することはできません。 プログラムに書式ルールに対して作成された演算子が含まれている場合、MetaEditorはコンパイル時にエラーメッセージを生成します。 つまり、誤った演算子を含むプログラムは使用できません。
与えられたオペレータのタイプに特有のフォーマットルールのセットとして、 "オペレータフォーマット"というフレーズを理解する必要があります。 各タイプの演算子にはそれぞれ独自のフォーマットがあります。 オペレータフォーマットについては、オペレータで詳しく説明しています。
演算子の実行順序
どのプログラムの非常に重要な特性は、オペレータが実行する順序です。 演算子は何の理由も例外もなく実行できません。 MQL4では、以下の演算子実行順序が受け入れられます。
演算子は、プログラム内で発生する順序で実行されます。 オペレータの実行の方向は、左から右、上から下に受け入れられます。 |
これは、シンプルな演算子と複合演算子の両方が、詩の行のように1つずつ実行されることを意味します。まず、先頭の行を読み、次に低い行、次に次の行などを読みます。 1つの行に複数の演算子がある場合は、それらを1つずつ左から右に連続して実行し、最も近い下の行で同じ順序で実行します。
複合演算子を構成する演算子は同じ方法で実行されます。コードブロック内の演算子は、前の演算子が実行された後にのみ実行されます。
オペレータの作成と実行:例
演算子を含むプログラムのテキストは、通常のテキストまたは数学的表記法に似ています。 しかし、この類似点は正式なものに過ぎません。 通常のテキストでは、ノートを任意の順序で配置できますが、プログラムでは明確な順序を保つ必要があります。
例として、代入演算子がどのように動作するかを見てみましょう。 私たちは単純な線形方程式系を解き、演算子で通常のテキストとプログラムコードのいくつかの数学的計算の表現を比較します。
問題7 式システムがあります:
Y = 5 Y-X = 2 変数Xの数値が見つかります。 |
解決策1 用紙上の通常のテキスト:
1. 5 - Х= 2
2.Х= 5-2
3.Х= 3
ソリューション2 プログラム内のテキスト:
1 2 |
<span class="notranslate"> Y = <span class="number">5</span> ;</span> <span class="notranslate"> <span class="comment">// ライン1</span></span> <span class="notranslate"> X = Y- <span class="number">2</span> ;</span> <span class="notranslate"> <span class="comment">// 2行目</span></span> |
どちらのソリューションでも、メモやコード行には完全な内容があります。 それにもかかわらず、ソリューション1の行は、その外観が代入演算子形式に準拠していないため、そのままプログラムで使用することはできません。
ソリューション1で与えられた注釈は、変数間の関係についてプログラマーに知らせるためにのみ使用できます。 プログラム内の演算子は他の目的のために割り当てられます。 マシンにどのような操作を実行する必要があるかを通知し、操作を実行する順番をマシンに通知します。 すべての演算子は、例外なく、あいまいさを許さない正確な指示を表します。
ソリューション2の演算子は両方とも代入演算子です。 代入演算子は、マシンに次の順序を与えます。
等式記号の右側の式の値を計算し、等号の左側の変数に取得した値を代入します。 |
このため、代入演算子の等号の左側には変数だけを置くことができます。 たとえば、5 - Х = 2の レコードは 、文字セット5-Х が変数ではない ため、エラーが含まれて います。 これは等式記号の右側に計算された式の数値を配置するメモリセルが存在しない理由です。
第2の解決策のオペレータの実行中にコンピュータに従ってみましょう。
1.オペレータに渡す(1行目)。
1 |
<span class="notranslate"> Y = <span class="number">5</span> ;</span> <span class="notranslate"> <span class="comment">// ライン1</span></span> |
2.オペレータの右部分を参照する。 (右の部分は、等号記号とセミコロンの間にあります)。
3.コンピュータが、オペレータの右側の部分に数値が含まれていることを検出しました。
変数Yのメモリセルに数値(5)を記録する。
5.次の演算子を渡す(2行目)。
1 |
<span class="notranslate"> X = Y- <span class="number">2</span> ;</span> <span class="notranslate"> <span class="comment">// 2行目</span></span> |
6.オペレータの右側の部分を参照します。
7.コンピュータは、演算子の右部分に式が含まれていることを検出しました。
オペレータ(5-2)の右部分の数値を計算する。
変数Хのメモリセルに数値(3)を記録する 。
手順1〜4は、コンピュータの最初の演算子の実行を示しています(行1)。 手順5〜9は、コンピュータの2番目の演算子の実行を示しています(2行目)。
実行可能なプログラムをコード化するためには、プログラマはこのプログラムで何が実行され、どのような順序で実行されるのかを認識しなければなりません。 特に、すべての数学的計算がプログラムに組み込まれるわけではありません。 あらかじめオペレータを準備する必要がある場合があります。
たとえば、数学的な問題を解決するときには、多くの中間計算が行われます。 数学者が適切な解を見つけるのを助けることができるが、これらの計算はプログラミングの観点からは役に立たないことが分かる。 変数の元の値や他の変数の値を計算する式など、意味のある解のみをプログラムに含めることができます。 前の例では、最初の演算子は変数 Yの 数値に関する情報を保持 し、2番目の演算子は関心のある変数 Xの 値を計算する式を提供 します。
実行可能なプログラムには、例として使用したもののような式が含まれていますが、プログラムで可能な演算子として評価した場合にのみ理解できるような式を見つけることもできます。 たとえば、以下のレコードを考えてみましょう。
1 |
<span class="notranslate"> X = X + <span class="number">1</span> ;</span> <span class="notranslate"> <span class="comment">//カウンタの例</span></span> |
数学的論理と常識の観点からは間違っているようです。 しかし、それを数学的表現ではなく演算子と見なすことは、まったく受け入れられます。 ところで、この演算子はコーディングに広く使われています。
この演算子では 、代入演算子を実行するときに 変数 Xの 新しい値を 計算します。 すなわち、コンピュータは、演算子の右部分の値を計算するときに、変数 Xの 数値を含むメモリセルを参照する 。 この例では、それを参照する瞬間に3に等しいことが分かります。 そして、代入演算子(3 + 1)の右辺の式を計算し、得られた値(4)を変数 Xの メモリセルに書き込み ます。 この代入演算子を実行すると、変数 X に新しい値(4)が与えられます。 変数 X が別の代入演算子の等号の左部分に現れる まで、 マシンはこの変数 Xの 値を保存し ます。 この場合、この変数の新しい値が計算され、次の変更に格納されます。