文系人間のためのシステムトレーダー養成所 メタトレーダー講義第七回 関数
--------

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009-03-14

メタトレーダー講義第七回 関数

皆さんこんにちわ。今回は関数についての講義ですね。これが終わればあと二つの講義でインディケーター作成の説明にはいりますので頑張りましょう!


この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)   
                            MQL4講座
                            Coders'guru   
                             www.forex-tsd.com                      
                                  -7-
                                関数


MQL4の関数の世界へようこそ。
関数には、どの言語の関数でも二つの段階があります。
つまらないものとして学んでいる段階
常に救命ボートとして使っている段階 です。

いつものことですが、今回も言わせて下さい。
前のレッスンは楽しめて頂けたでしょうか?楽しめて頂けると嬉しいのですが。

さぁ、それでは講義にまいりましょう。

関数ってなに?
関数はソーセージ製造器に大変よく似ています。とスパイスを入れると、ソーセージがでてきますよね。
お肉とスパイスが関数仮引数で、ソーセージが関数返却値(return値)になります。製造器それ自体が関数本体になります。
ソーセージ製造器と関数にはただ一つだけの違いがあります。その違いとは、関数の中にはなにも出さないことがあることです。(MQL4で何もreturn値に返さないことをvoid(空洞)といいます)

いくつかの例をみてみましょう。
____________________________________________________________________________________________
double //ソーセージの種類-返却値
my_func(double a, double b,double c)//関数名と仮引数リスト(肉とスパイス)
{
return(a*b+c)    //出てくるソーセージ-返却値
}
____________________________________________________________________________________________

上の例のように、関数は返却値のtypeである"double"から始まります。そして、括弧が後に続く関数名が続きます。
括弧の中にはお肉とスパイス...失礼しました。仮引数を入れてください。
ここでは三つの仮引数に対してdouble a, double b, double cを入れました。
それから、関数本体には始まりと終わりに大括弧をいれます。私たちの例では関数本体には演算子が生み出されています(a*b+c).
returnキーワードには最終結果を返す責任があります。


Returnキーワード

returnキーワードは関数を終わらせます(breakキーワードがループを終わらせたのと似ています)
そして、それは関数呼び出し式にコントロールを引き渡します。
returnキーワードは、上の式のように、その括弧の中に式を入れることができます。
例 return(a*b+c);この意味は関数を終わらせ、式の結果を返すというものです。
そして、これには、式がない場合や、今回のケースのように、式を終わらせるだけに使用することがあります。

注目:全ての関数がreturnキーワードを使うわけではありません。特に返却値がない場合は使わないことが多いです。例をご覧ください。
____________________________________________________________________________________________
void //voidはソーセージが-return値がないことを示します。
my_func(string s) //関数名と関数パラメーター(肉とスパイス)
{
  Print(s);
}____________________________________________________________________________________________

上の関数はreturn値がありません。でもそれは貴方が調達したパラメーターsを出力します。
関数に返却値がない時はvoidを関数返却タイプとして使います。
これらの関数の種類は、いくつかのプログラミング言語で"Methods(方法)"と呼ばれていますが、MQL4では、関数と呼びます。

関数呼び出し

私たちは関数が何かについて大変よく理解しましたね(私の希望的観測でしょうか?)。MQL4ではどのように関数を使うのでしょうか?

関数を書いて、あなたのプログラムで関数を使った後に、特別な処置が存在します。
この処置を、呼び出しといいます。

あなたが二つの整数(integer)の総和を集める(collect)関数を使ったとしましょう。
下の関数になります。
____________________________________________________________________________________________
int collect(int first_number,int second_number)
{
   return(first_number+second_number);
}___________________________________________________________________________________________

あなたは上の関数がどのように働くかわかるでしょう。しかし使ってはなりません。

このように使ってください。
____________________________________________________________________________________________
int a=10;
int b=15;
int sum=collect(a,b);
print(sum);
____________________________________________________________________________________________

上の例では魔法ように25が出力されます。でもどのようにしてわかるのでしょうか?
この魔法の行はint sum=collect(a,b)です。ここで貴方は変数(sum)に関数と返却値をもつように宣言し、関数に二つの仮引数(a,b)を与えたのです。
これを一般的に関数呼び出しといいます。
MQL4があなたの作った関数名を見た時、仮引数を持って、関数に行き、すぐに結果を持って戻ってきて、同じ行に結果を置きます。
これは、あなたが呼び出した関数の中の場所の代わりにすべての関数の文をコピーするようなものです。わかりましたか?

関数の中に関数をいれこむ。

あなたは関数本体のなかに、他の関数をまとめることができます。なぜなら、呼び出し文は普通のステートメントとして扱われるからです(実際ステートメントです)

例えば

今から上記のcollect関数の中に、collectionの結果を出力する新しい関数が入ったものを使います。

____________________________________________________________________________________________
void print_collection(int first_number,int second_number)
{
   int sum=collect(first_number,second_mumber) 
   Print(sum);
}____________________________________________________________________________________________

ここで私たちはprint_colllection関数本体の中にcollect関数を呼び出し結果を出力しました。voidの意味は返却値を返さないという意味でしたね。


MQL4の特別な関数 init(),deinit() start():

MQL4では、すべてのプログラムの始りに関数"init()"(初期化)があります。それはあなたのプログラム(エキスパートアドバイザー、カスタムインディケーター)とメタトレーダーチャートをくっつける時、もしくはあなたがチャート周期や通貨ペアをかえたりした時に発生します。
そしてその仕事はあなたのプログラムのメイン変数を初期化することです(初期化変数については次回の講義で触れることにします)

あなたのプログラムがその仕事を終えた時もしくは、チャートウィンドウをしまった時や、チャート周期
や通貨ペアをかえた時、メタトレーダーターミナルを終了した時に関数"deinit()"(de-initialize)が発生します。

第三の関数(最も重要な関数)は"start"()で、これは、新しい値段が記録されるたびに発生します。あなたのプログラムの90%はここの関数のなかで行われています。

これらの関数は、実際にエキスパートアドバイザーや、カスタムインディケーターのコードを打ち込んでいる時に、必須の知識としてより詳しくしることになるでしょう。

楽しんでいただけましたでしょうか。

それでは。
Coders'Guru


今回の講義は変数に次ぐ難しさでしたね。。プログラミング使える人ってすごいですよね。。
まぁ使ってるうちに分かるようになるというCoders氏を信じましょう。

ともかくお疲れ様でした。使っていくうちに感覚的にわかっていくと思います。


最後までお読み頂きありがとうございました。




押していただけると大変嬉しいです。よろしくお願いします。
人気ブログランキングへ






theme : FXでシステムトレード
genre : 株式・投資・マネー

コメントの投稿

管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。