■超直感!MT4プログラミング講座■ 第4回 関数の定義方法

スポンサーリンク

おはようございます。キリンです。
「パソコンを付けたら、まずブログを書く!」というマイルール作ってみました。
実践せねば!とあせくせブログ書いています。
「継続は力なり」ではなく「継続のみ力なり」との言葉をみかけました。
その通りだなーと思い、続ける大切さが身にしみました。
さて、第4回は前回のお話の続きで、関数の定義からお話しさせていただきますね。
第4回 関数の定義方法

関数の定義方法

int RingoNoGoukeiNedan(int RingoNoKosuu){
    int RingoNoTanka = 80;
    double ShouhiZei = 1.05;
    int GoukeiNedan = RingoNoKosuu * RingoNoTanka * ShouhiZei;
    return(GoukeiNedan);
}

※詳しく説明すれば、「サブルーチンの定義方法」なのですが、
 それを説明するのはもうちょっと後にします。
※プログラムは上から下に動作していきます。その順序で説明していきます。
なぜ、関数というのが機能するのかということを説明します。
前回、りんごの5個の合計値段を得たければ、

RingoNoGoukeiNedan(5);

で得ることができますというお話をしました。
その「RingoNoGoukeiNedan()」という関数の中身が、冒頭の青色部です。
具体的に中身を見てみましょう。

「 () 」の中に変数が定義されている

int RingoNoKosuu

これが非常に大事な部分です。
「変数は数字を割り当てたものだ」ということを
第1回でお話させていただいておりました。

int RingoNoGoukeiNedan(int RingoNoKosuu)

と定義した場合、その関数を

RingoNoGoukeiNedan(5)

という形で呼び出すと、()の中で

RingoNoKosuu = 5

としたことになります。
「ん?よくわからない。」という方も多いかもしれませんが、
下記の説明を読んでいっていただければと思います。

「 { } 」で区切られている

{}の中が関数の処理の中身になります。
一連の動作として、5.のreturnが出るまで行います。

{}の中で変数が定義されている

int RingoNoTanka = 80;
double ShouhiZei = 1.05;

これで、RingoNoTankaとShouhiZeiに数値を割り当てています。
RingoNoTankaは「 80 」として扱うことができ、
ShouhiZeiは「 1.05 」として扱うことができます。
※ShouhiZeiは小数点以下を使うので、double型で定義します。

変数を用いて計算する

int GoukeiNedan = RingoNoKosuu RingoNoTanka ShouhiZei;
GoukeiNedanを右辺の式で計算しています。

  • RingoNoKosuuは、 () の中で 「 5 」を入れました
  • RingoNoTankaは、80
  • ShouhiZeiは、 1.05

つまり、

int GoukeiNedan = 5 * 80 * 1.05;

としたことになります。
※ちなみに、「 * 」というのは掛け算を表します。
そう、このときのために、()の中に int RingoNoKosuu を入れていたのですね。
RingoNoKosuu以外は外部から設定ができないことも理解していただければ完璧です。
()の中にいませんからね。

returnで{}内の処理を終了し、戻り値を返す

return(GoukeiNedan);
これが、戻り値を返すためのものです。
returnの()の中が、結果として出力されます。
この場合、4.で計算した GoukeiNedan が戻り値として返されます。
また、returnのところまでくると、{}の一連の動作が終了します。
※戻り値を返すというのは、関数の処理の結果を出すと理解してもらえればOKです。
具体的には

RingoNoGoukeiNedan(5);

という式は、
「RingoNoGoukeiNedan()の中のRingoNoKosuuに 5 を代入し、
 returnによって返される GoukeiNedan の数値を得る」
という一連の動作が行われます。

int x = RingoNoGoukeiNedan(5);

とすると、x は RingoNoGoukeiNedan(5)より返された、GoukeiNedanの値になります。
ややこしくなってきましたね。
ここは非常に大事な部分です。
しっかりと付いてきてくださいね!
疑問質問大歓迎です!
お気軽にコメントください。
最後に、皆さんに問題です。

int RingoNoGoukeiNedan(int RingoNoKosuu, int RingoNoTanka = 80, double ShouhiZei = 1.05){
    int GoukeiNedan = RingoNoKosuu * RingoNoTanka * ShouhiZei;
    return(GoukeiNedan);
}

とした場合、この関数はどのように数値を入力すればいいでしょうか?
考えてみてくださいね^^
最後までお読みくださり、ありがとうございます!

コメント

  1. りある より:

    SECRET: 0
    PASS:
    こんにちは。
    リンゴの個数だけ引き数として与えられていないので、外部変数?でリンゴの個数を与えると計算出来るのかな?
    前のとの違いが良く分かりません。どちらも同じ?
    携帯からだとやりにくいですね。解答楽しみにしています。

  2. junky より:

    SECRET: 0
    PASS:
    りんご5個だったら、
    int x = RingoNoGoukeiNedan(5,80,1.05);
    か、
    int x = RingoNoGoukeiNedan(5,int RingoNoTanka, double ShouhiZei );
    でしょうか?
    名前がRingoNoまで同じなのでややこしくなってるような気がします(笑)

  3. SECRET: 0
    PASS:
    >りあるさん
    コメントありがとうございます!
    携帯だと打ちにくいですよね^^;
    回答を次回のブログに載せました。
    ご覧になっていただければ嬉しいです。

  4. SECRET: 0
    PASS:
    >junkyさん
    二つ目は間違いですねー。
    でも、最初はばっちり正解です!
    コメントありがとうございます^^
    関数や変数の名前はなんでもいいんだっていう
    ことを表すために、長くしていたんです。
    確かにみづらいですよねw

  5. むん より:

    すごくわかりやすいです!
    初心者むけにここまで説明されている文章は、
    本当に少ないので、感謝です!
    最後まで読破します。

  6. むん より:

     何度もコメント失礼します;;
    つまり、
    林檎の合計値段(林檎五個)
    { 林檎単価 = 80円
      林檎の消費税=1.05
    林檎の合計値段(戻り値)=林檎五個×80円×1.05}
    リターンして、はじめに戻る。

    という例文になるということですよね?
    ひらがなで表しただけなんですが、ちょっと頭の中を整理したくて質問させていただきました;

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