関数をマスターすると、プログラムを書くスピードがアップするよ!
関数とは?
「プログラムは、何度も同じことを書かないといけない」
と思っている方、ぜひ関数を使ってみてください。
関数とは、何度も繰り返すプログラムを、まとめた状態のものです。
事前に、まとまりを作っておくことで、同じプログラムを何度も書く必要がなくなります。
名前が似ていますが、注意してください。
たとえば、以下のようなプログラムのまとまりを関数と呼びます。
足し算をする関数です。
//MyFunctionという関数を作成します。
int MyFunction(int number)
{
//numberという変数を読み込んで、suujiと足し算します。
int suuji = 100;
suuji = suuji + number;
//足し算の結果を返却します。
return suuji
}
上記の例では、MyFunctionという関数を作成しました。
ちなみに、「MyFunction」じゃなくても、関数の名前はなんでもOKです。
「朝日奈りさSpecial」とかでOKです。(ダサい)
さて、ここからは上記の例を参考にしながら、関数の使い方について詳しく見ていきましょう。
関数のプログラム例
関数は、プログラム全体で見ると以下のように書きます。
//+------------------------------------------------------------------+
//| SampleMQL_function.mq4 |
//| Copyright 2021, 朝日奈りさFXchannel |
//| https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, 朝日奈りさFXchannel"
#property link "https://mql-programing.com/"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
int suuji = MyFunction(10);
Comment("\n","OnInit()という関数を実行します。",
"suujiの結果は",suuji,"です。");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
Comment("\n","OnDeinit()という関数を実行します。");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
int suuji = MyFunction(20);
Comment("\n","OnTick()という関数を実行します。",
"suujiの結果は",suuji,"です。");
}
//+------------------------------------------------------------------+
//MyFunctionという関数を作成します。
int MyFunction(int number)
{
//numberという変数を読み込んで、suujiと足し算します。
int suuji = 100;
suuji = suuji + number;
//足し算の結果を返却します。
return suuji;
}
//+------------------------------------------------------------------+
かなり分かりにくいと思いますが、一番下に関数を書いています。46~56行目です。
このようにOnInit,OnDeinit,OnTickとは、別の関数として、新しい関数を作ることができます。
OnInit,OnDeinit,OnTickについては以下の記事を参考にしてください。
関数の基本的な使い方
上記のプログラムの16行目を見てください。以下のプログラムが書かれています。
int suuji = MyFunction(10);
MyFunctionを使っています。
細かく見ていくと、「suuji」というint型の変数を宣言しています。
その「suuji」にMyFunctionの計算結果を代入しているといったプログラムです。
関数はこのように使うことが多いので、このパターンを覚えておくと良いでしょう。
「あれ?MyFunction(int number)じゃないの?」と疑問に思った方は、プログラミングのセンスがあります。
なぜMyFunction(int number)ではなく、MyFunction(10)と書いているのかを、関数の構造を見ながら解説します。
関数の構造と書き方
関数の構造のポイントは以下の3点です。
- 引数
- 関数の内容
- 戻り値(返り値)
それぞれ見ていきましょう。
引数とメリット
引数とは、関数の内容で使用する値を、外部から持ってくるために存在します。
どういうことかというと、関数の中で変数を宣言しなくて良くなります。
メリットは、その関数を使って同じ計算をしたいとき、値を変えてもう一度計算させることができることです。
例えば、100+10を計算させたい時、「100+10」とそのまま書いてしまうと、結果は110にしかなりません。
しかし関数を使うことで、100+10の「10」の部分を「20」に変えて、「100+20」も計算させることができます。
つまり同じMyFunctionという関数を使って、「100+10」も「100+20」も計算できるのです。
引数の書き方
引数は、関数名の右横に宣言します。
上記の例を抜粋すると、以下の部分です。47行目です。
int MyFunction(int number)
「MyFunction」という関数名の右横に(int number)を書いています。
このnumberを引数と言います。
ちなみにint numberという書き方は、変数の書き方と同じなので、わかりやすいと思います。
引数は、関数の内容で使用される変数です。別の値を代入することもできます。
関数の内容
関数の内容は、計算させるルールを書きます。
上記の例だと、「100+引数」というルールを書いています。
何度も計算させたいことを書くと良いでしょう。
プログラムを書く順番として、関数を書くのは、完成の一歩手前です。
最初は上からプログラムを書いていって、何度も同じ計算をしている場合、関数にまとめるとスッキリします。
また、関数にしておくことで、次に作るプログラムに応用できるので、プログラムの作成がどんどん楽になっていきます。
戻り値(返り値)
最後に戻り値です。返り値とも呼ばれます。
戻り値は、関数の計算結果を出力する時に使います。
これによって、関数で計算させるだけでなく、計算結果を引き継ぐことができます。
少しずつ見ていきましょう。
まずは書き方です。
戻り値の書き方は以下のようなパターンが多いです。
//関数を作成
int MyFunction(int number)
{
//関数の内容を書く
//戻り値を出力
return suuji;
}
ポイントは2つあります。
- 戻り値の型の宣言
- 戻り値の値を出力
それぞれ解説します。
戻り値の型の宣言
まず2行目の「int MyFunction(int number)」ですが、一番左に「int」が宣言されています。
これはMyFunctionという関数が計算した結果、int型の変数を出力することを表しています。
つまり、戻り値の型は「int型」になるのです。
ちなみに変数の型であれば、なんでも設定することができます。
変数の一覧は以下が参考になります。
戻り値の値を出力
上記のプログラムの8行目をご覧ください。
suujiという変数を「return」しています。
return suuji;
returnとは、変数や値を戻す(返す or 出力する)ために使うものです。
ほとんどの場合、プログラムの最後に書かれています。
このように書くことで、MyFunction関数は、int型のsuujiを戻すことができます。
「戻す」とは?
先ほどから何度も「戻す」という言葉を使っていますが、プログラミング界では一般的な言葉です。
関数を使うときに、「処理が戻ってくる」という意味から使われています。
どういうことかというと、関数を使うと、処理が関数に飛びます。
関数を使う時、以下のように使います。
int suuji = MyFunction(10);
MyFunctionに「10」を入力し、計算した結果をsuujiに代入します。
「MyFunctionに「10」を入力する」段階で、処理が一時的にMyFunctionに飛びます。
そしてMyFunctionの処理が終わった後(suujiが出力された後)、処理が戻ってきます。
この辺りは言葉で解説するのは難しいので、プログラム例を載せておきます。
この2つのプログラムの違いは、関数を使っているか使っていないかですが、全く同じ処理をします。
ぜひ見比べてみてください。
16~17行目あたりが違っています。
関数を使っていない場合
//+------------------------------------------------------------------+
//| SampleMQL_function.mq4 |
//| Copyright 2021, 朝日奈りさFXchannel |
//| https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, 朝日奈りさFXchannel"
#property link "https://mql-programing.com/"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
int suuji = 100;
suuji = suuji + 10;
Comment("\n","OnInit()という関数を実行します。",
"suujiの結果は",suuji,"です。");
//---
return(INIT_SUCCEEDED);
}
関数を使った場合
//+------------------------------------------------------------------+
//| SampleMQL_function.mq4 |
//| Copyright 2021, 朝日奈りさFXchannel |
//| https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, 朝日奈りさFXchannel"
#property link "https://mql-programing.com/"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
int suuji = MyFunction(10);
Comment("\n","OnInit()という関数を実行します。",
"suujiの結果は",suuji,"です。");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//MyFunctionという関数を作成します。
int MyFunction(int number)
{
//numberという変数を読み込んで、suujiと足し算します。
int suuji = 100;
suuji = suuji + number;
//足し算の結果を返却します。
return suuji;
}
//+------------------------------------------------------------------+
まとめ
関数は計算のルールをまとめたプログラムです。
今回は足し算のルールを作ってみました。
関数には3つのポイントがあり、これをマスターすれば関数を使いこなすことができるでしょう。
- 引数
- 関数の内容
- 戻り値(返り値)
関数は正直難しいです。
初心者のかたは、関数を使うことは意識せず、まずはプログラムを作ってみましょう。
コメント