前回は MQL5公式リファレンスの見方 について解説しました。
改めて前回の内容をおさらいをしておくと、
- MQL5公式リファレンスは、MQL5の設計元であるメタクオーツ社が提供している、MQL5の言語構造に関して説明しているページ群である。
- 調べたい言語要素にカーソルを合わせた状態でキーボードのF1キーを押す(あるいは「ヘルプ」メニューの「MQL5リファレンス」をクリックする)事で、メタエディターから直接MQL5公式リファレンスにアクセスすることができる。
- MQL5公式リファレンスでは、関数の役割や、引数、戻り値、注意事項、関数を利用する際のサンプルコードなどが確認できる。
ということをお伝えしました。
今回は クラス というものについてお話ししたいと思います。
※今回も含め、これからしばらくの間、講座記事はクラスとそれに関連する内容が続くと思います。
ただし、この言語基礎編で解説するのは、あくまでもざっくりとした概要だけです。
より細かい使い方についてはEA制作発展編の中で、具体例を交えながら解説していくので、
現時点でクラスに関する内容を読み終わって、理解できなくても全く問題ないです。
後でちゃんと解説していきます。
クラスを使いこなせるようになると、MQL5の潜在能力がより引き出せるようになり、開発もぐんとラクになります。順を追って1つ1つ理解していけば、決して難しいものではありません。
頑張ってマスターしていきましょう(^^♪
クラスとは?
クラスというのは、端的に言うと変数 と 関数 をまとめたものです。
変数とはデータを格納する箱、でしたね?
関数とは?→処理を行う仕組みです。
変数と関数をまとめるということは、クラスでは、データと処理をまとめることができる、ということです。
それが何を意味するもので、何がすごいのか?
現時点では全くピンとこないと思います。(私はピンときませんでした)
今は、それで大丈夫です。
とりあえず、変数や関数よりも高機能な仕組み、ぐらいの理解をしておいてください。
クラスの作り方
クラスを作るにあたっては、関数や、構造体、enum列挙型等と同様に宣言・定義が必要になります。
宣言・定義はグローバル領域にて行います(イベントハンドラーなどの関数内で宣言・定義を行ってもコンパイルエラーにはなりませんが、そのような記述をする意味はないでしょう)
1.classキーワードの記述
クラスを作る際にはまず
というキーワードを先頭に記述します。
classキーワードの後は、自身で決めたクラス名を記述します。
//classキーワード→クラス名
class exampleClass
こんな感じですね。仮にクラス名を「exampleClass」としました。
クラス名の後に
{}
}の後には、区切りの示すセミコロン(;)をつけます。
//classキーワード→クラス名
class exampleClass
{
};//文末にはセミコロンをつける。
2.アクセス指定子の記述
というアクセスレベルによって、分類されます。
private、protected、publicキーワードのことをアクセス指定子と呼びます。
「クラスの概念もピンと来ていないのに、アクセスレベルとかアクセス指定子とか、訳分からない事言わないで((+_+))」
と言われそうですが、まあ落ち着いてください。
繰り返しになりますが、クラスについてはEA制作発展編の中で解説していきますので、今わからなくても大丈夫です。👍
さて、
第26回「ローカル変数について」 と 第27回「グローバル変数について」 で
変数のスコープ(有効範囲)についてお話ししました。
サラッとおさらいすると、ローカル変数の有効範囲は変数宣言をした関数の中に限定されるのに対して、グローバル変数は、関数が処理を終了した後も、値の記憶を保ち続けることができる
ということを解説しました。
※ローカル変数については↓の記事をご参照ください
※グローバル変数については↓の記事をご参照ください
クラス内の変数や関数の、アクセスレベルというのも、それと同じようなものだと考えてください。
アクセスレベルは、「クラス内の変数や関数がどこでなら、使えるか」を定めるものになります。
private,protected,publicが、それぞれどういう有効範囲になるのか?
という点については次回以降に解説していきます。
現時点では、「そういうものがあるんだー」ぐらいに思っていただければ結構です。
アクセスレベルの分類は、private,protected,publicキーワードを使って行っていきます。
//classキーワード→クラス名
class exampleClass
{
private://アクセスレベルprivateを記述(キーワードの後にはコロン)
int ex1;//privateアクセスレベルの変数「ex1」の宣言
protected://アクセスレベルprotectedを記述(キーワードの後にはコロン)
double ex2;//protectedアクセスレベルの変数「ex2」の宣言
public://アクセスレベルpublicを記述(キーワードの後にはコロン)
int exFunction(int ex3);
};//文末にはセミコロンをつける。
↑こんな感じで、
変数や関数をアクセスレベル=privateに設定したい場合は private:(コロン)
変数や関数をアクセスレベル=protectedに設定したい場合は protected:(コロン)
変数や関数をアクセスレベル=publicに設定したい場合は public:(コロン)
を記述し、その下に各アクセスレベルの変数や関数を書き込んでいきます。
この時に使うのは:(コロン)です!
文章を区切るときに使う;(セミコロン)ではないので気をつけてください。
セミコロンにしていると、「colon sign expected (コロンが必要です)」というコンパイルエラーが発生します。
3.{}内に、クラスにまとめる変数や関数を記述していく
変数のデータ型や、関数の戻り値を書いて、変数名や関数名を書く・・・最後に;(セミコロン)
をつける・・・という一連の、変数や関数の宣言・定義のルールはクラスの{}内でも同じです。
ただし、関数の実際の処理記述({}内に書いていく内容)は、この時には基本的には書きません。
1行で済むような、簡単な処理記述なら書くこともある(インライン定義)のですが、関数に関して、クラス内の{}で行うのは、
データ型の設定
関数名の設定
引数の設定
までとなります。(このあたりのことについては、次回詳しく触れる予定です)
メンバについて
もっとも、クラスとは異なり、構造体は主にデータの集まりを表すために用いられるので、クラスほど複雑な機能を持たない事が殆どです。
クラスのメンバは、そのクラスが表現する特性や振る舞いを定義します。
たとえば、’人’を表すクラスを考えた場合、名前や年齢といった情報を変数(メンバ変数)として持ち、歩くや話すといった行動を関数(メンバ関数)として定義することができます。
今は何を言っているのかよくわからないと思いますが次回以降具体的なクラスの使い方を丁寧に解説していくので、安心してください。
おまけ
今回のクラスをもって、{} を使った構文は大方説明 をしてきたわけですが、
{}の後にセミコロン(;)をつけるものと、つけないものがあるのがややこしいですね(>_<)
いったん整理してみました
{}後のセミコロン必要?不要?まとめ
if文→不要
for文→不要
関数の定義→不要
構造体の定義→必要
enum列挙型の定義→必要
クラスの定義→必要
こんな感じになります。
void exampleFunction(){}//セミコロン不要
struct exampleStructure{};//セミコロン必要
enum ENUM_EXAMPLE{};//セミコロン必要
class exampleClass{};//セミコロン必要
void OnStart()
{
int x=1;
if(x){}//セミコロン不要
for(;;){} //セミコロン不要
}
【超入門】MQL5 EA講座 第47回「MQL5公式リファレンスの見方」【EAの作り方】←
→【超入門】MQL5 EA講座 第49回「クラスについて2 -クラスの使い方-」【EAの作り方】
※クラスの実際の使用例に関しては、今後の講座記事にはなりますが、以下の記事で解説していますので、今はよくわからなくてもご安心ください。
・MQL5 EA講座 第71回「トレード用のオリジナルクラスを作る」
・MQL5 EA講座 第82回「ポジション情報管理クラスを作る-その1」
・MQL5 EA講座 第83回「ポジション情報管理クラスを作る-その2」
・MQL5 EA講座 第88回「待機注文情報取得用のクラスを追加する」
・MQL5 EA講座 第96回「トレーリングストップクラスを作る1」
コメント