スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
メタバイザー
スポンサー広告  

メタトレーダー講義 第7回 関数
皆さんこんにちわ。今回は関数についての講義ですね。これが終わればあと二つの講義でインディケーター作成の説明にはいりますので頑張りましょう!
関数はプログラミング未経験者からすると理解するのが難しいと思います。
使っているうちに理解が深まってくるとは思いますが、今回のCodersGuruさんの説明はそのような中でも相当に分りやすい説明であると思いますので、頑張って付いてきて下さい。
それでは始めましょう。Codersguruさんによる、関数講義です。




この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)   
                            メタトレーダー講座
                            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)    //出てくるソーセージ-返却値
}

上の例のように、関数は返却値の種類である"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



メタバイザーによる補足説明
関数についての説明はなかなか難しかったとおもう。

私が関数についてしっかり理解できるようになるまでには結構時間がかかった。

CodersGuruさんの説明は大変にわかりやすいが、ここでは更に具体的な解説をしていこう。


int collect(int first_number,int second_number)
{
   return(first_number+second_number);
}

これは、intタイプの具材(引数)を二つ必要とするcollect製造機(関数)で、この製造機に具材(引数)を放りこむと、放り込まれた2つの具材(引数)の総和をソーセージ(返却値)として、製造する関数だ。


int a=10;
int b=15;
int sum=collect(a,b);
print(sum);

そしてこの例を見て欲しい。
上のcollect製造機(関数)の具材(引数)としてint(整数)である10と15を入れている。
そうすると、collect製造機は10と15の総和をソーセージ(返却値)として製造してくれる。
そのソーセージをsumという箱に入れるので、sum=25になる。

・・これはただCodersGuruさんの説明を言い換えただけだが、理解して頂けただろうか・・?

関数は実際にはエキスパートアドバイザーで必須の知識になる。

この関数を理解していないと、自分が思ったような自動売買ソフトをつくることはできないので、もし君がEAを作ろうと考えているならば関数は良く抑えておいて欲しい。

今回は以上だ。最後までよんでくれてどうもありがとう。


何か質問や意見があれば、メタバイザーの放課後まで遊びに来てほしい。 

人気ブログランキングに参加している。
にほんブログ村 為替ブログ FX システムトレード派へ
もしよろしければ応援してほしい。どうもありがとう。

ちなみにブログをやっているメタトレーダー仲間は から見ることができる。

それではまた会おう。
メタバイザー
メタトレーダー講義   0

:システムトレード - :株式・投資・マネー


http://metavicer.blog61.fc2.com/tb.php/75-5b54947d
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。