こんばんは!キリンです。
前回の「変数の定義」のお話ですが、
やはりつまづいている方が多かったようですね。
基本的で、非常に重要なことであるにも関わらず、
分かりやすい説明がないと思っていました。
みなさんの疑問を解決することができたとすれば、私は嬉しいです。
前回、プログラミングの中には主立って「関数」と「変数」があると説明させていただきました。
今回は「関数」のお話です。(前回の変数と混同しないようにお気をつけてくださいね。)
関数と変数の根本的な違いの説明から入りたいと思います。
■関数とは?
■関数の使い方
■イコールの使い方
■関数の定義
■関数とは?
プログラミングっぽく専門的に書いてしまうと、非常にわかりにくいと思いますので、
直感的に説明します。
A君がB君に、
「5個のりんごの値段を計算して」
と頼みます。
するとB君は、
5個のりんご × りんご1個の単価 × (1+消費税率)
という計算をします。
計算が終わり、B君はA君に
「●●●円だよ」
と教えます。
実は、これが関数の動作なんです。
実際の関数に置き換えますと、
・ A君はあなた
・ B君は関数
・ りんごの個数は引数(ひきすう)
・ りんごの合計の値段は戻り値(もどりち)
※引数というのは、関数に値を代入する数のことです。
上記のりんごの個数が引数だって考えてもらえば分かりやすいと思います。
※関数の結果のことを戻り値といいます。
「~~の値を返す」というのも、「戻り値が~~である」というのと同義です。
「あなた」は「関数」に対して、「引数」を割り当ててあげれば「戻り値」が得られます。
先ほどの例題で例えるなら、
「A君」は「B君」に対して、「りんごの個数」を伝えれば「合計の値段」が得られます。
ということになります。
なんとなく伝わってきたのではないでしょうか。
ここで大事なのは、B君が計算するときに使う「りんごの単価」と「消費税率」が一定だということ。
だから、一連の作業で計算結果をすぐはじき出すことができるということです。
関数というのは、その「一連の作業」を指します。
「引数」を割り当てて、「一連の作業」をさせて「戻り値」を得る。
ちなみに、「戻り値」がない場合もあります。
一連の作業をさせればOKというときですね。
どういうときかというのは、必要なときに説明させていただきます。
では、次は実際の使い方です。
■関数の使い方
関数というのは、前回の変数と同じように「定義」します。
その定義の方法は、戻り値に依存します。
得たい戻り値が、
・整数だったらint
・小数点以下の数ならdouble
・真偽ならbool
・戻り値がいらないならvoid
です。
そして、通常の使い方は
int RingoNoGoukeiNedan(5);
という形になります。
変数との違いは、名称の後ろに「括弧()」があるという点です。
これは非常に大事ですので覚えてください。
前回の設定を、
「りんごの個数とりんごの単価」をB君に伝えて、
「消費税を含んだ合計値段」を教えてもらう
と変更したとします。
すると、関数の文章は(単価を80円とすると)
int RingoNoGoukeiNedan(5, 80)
というように、「,」で区切って値を入力します。
でも、RingoNoGoukeiNedanという関数自体には、まだ計算をするという内容が定義されていません。
それで、別枠で関数を定義させる必要があります。
その前に、イコールの使い方の説明をします。
■イコールの使い方
左に変数を置き、右に代入したい値を入れます。
int x = 10;
や
int x = RingoNoGoukeiNedan(5);
などですね。(5はりんごの個数です)
右側の結果が、左の変数に当てはまるということを覚えていただければと思います。
では、関数の定義の方法です。
■関数の定義
int RingoNoGoukeiNedan(int RingoNoKosuu){
int RingoNoTanka = 80;
double ShouhiZei = 1.05;
int GoukeiNedan = RingoNoKosuu * RingoNoTanka * ShouhiZei;
return(GoukeiNedan);
}
っとなるのですが・・・・
長くなってきましたので、これについてはまた次回お話させていただきますね。
最後までお読みくださり、ありがとうございます!
コメント
SECRET: 0
PASS:
りんごなどで表現すると分かりやすいですね。
でも、横文字ばかりになると、途端に分からなくなりますね(汗)
特に括弧が多くなるとその並びの法則が分からないと???になりやすいです。
教え方上手ですね。
もしかして、厳密には消費税や合計は、int ではなくて、 double になるのですか?
SECRET: 0
PASS:
>りあるさん
コメント、お褒めのお言葉ありがとうございます^^
もしかしてのご指摘は、大正解です。
誤記でした。
ありがとうございます^^
合計はint型で大丈夫だと思います。
厳密に言えば四捨五入とかあるのですが。
そのあたりは今回は含むと、混乱を招くので割愛しますね。
お読みいただきありがとうございます!
SECRET: 0
PASS:
■関数の定義
int RingoNoGoukeiNedan(int RingoNoKosuu){
int RingoNoTanka = 80;
double ShouhiZei = 1.05;
int GoukeiNedan = RingoNoKosuu * RingoNoTanka * ShouhiZei;
return(GoukeiNedan);
}
をmt4に入れてみました
'RingoNoKosuu' – variable not defined C:\Program Files\FXDD Malta – MetaTrader 4\experts\indicators\asobi.mq4 (42, 22)
'RingoNoTanka' – variable not defined C:\Program Files\FXDD Malta – MetaTrader 4\experts\indicators\asobi.mq4 (42, 37)
とかいっぱい出てきましたりんごの個数は定義してないからだけど単価はなぜダメっていわれたんだろう
この講座、本にしていただきたいです・・・
私即買います。笑