MQL言語における関数のルール

関数について

全てのタスクはサブタスクに分割することができ、それぞれ直接コードの形で表されるか、更に小さいサブタスクに分割することができます。
関数が実行する内容を記述したコードは、関数定義と呼ばれます。

function_header //ヘッダー
  {
   instructions //処理
  }

コードの1行目は関数定義のヘッダーのみで、{中括弧}に挟まれているのが関数の処理になります。
関数ヘッダーは、戻り値の型、関数名(識別子)、仮引数の記述を含みます。
関数に渡される仮引数の数は、64個以内にする必要があります。

関数は、プログラムの他の部分から必要に応じて何回でも呼び出すことが出来ます。

関数プロトタイプは、関数宣言ではなく関数定義です。
戻り型の明示的な宣言と、引数の型のリストによって、関数呼び出し時に厳密な型チェックと暗黙の型キャストが可能です。
多くの場合、コードの可読性を向上させるために、関数の宣言はクラス内で行われています。

関数定義は、宣言された関数と一致する必要があります。

double               // 戻り値の型
linfun               // 関数名
(double a, double b) // 仮引数
  {
   return (a + b);   // 戻り値
  }

return処理は、return の式の値を返す事ができます。
必要に応じて、式の値は関数返り値型に変換する事ができます。

返り値として使用できるのは、基本的データ型、基本構造体、オブジェクトポインタです。
配列、クラスオブジェクト、複合構造体の変数を返すことはできません。

値を返さない関数は、void 型で宣言する必要があります。

void errmesg(string s)
  {
   Print("error: " + s);
  }

関数の仮引数は、初期値を設定することができます
初期値の定数は、対応する型で定義する必要があります。

int somefunc(double a,
             double d = 0.0001,
             int n = 5,
             bool b = true,
             string s = "passed string")
  {
   Print("Required parameter a = ", a);
   Print("Pass the following parameters: d = ", d, " n = ", n, " b = ", b, " s = ", s);
   return(0);
  }

仮引数のいずれかに初期値を設定した場合、それ以降の仮引数にも初期値を設定しなければなりません。

int somefunc(double a,
             double d = 0.0001, // 初期値 0.0001 を宣言
             int n,             // 初期値が指定されていない
             bool b,            // 初期値が指定されていない
             string s = "passed string")
  {
  }

参照:オーバーロード、仮想関数、ポリモーフィズム

タイトルとURLをコピーしました