プログラミング事前課題 その8 処理をまとめる 関数

関数です。
今までプログラミングする時は

int main() {

	...

	return 0;
}

の中に全部の処理を書いてましたね。
これ一度想像してみて欲しいんですが、
プログラムの内容が長く複雑になってきて
処理をどんどん足して書いてたら、
仮に1万行まで増えてしまったとしましょう。

つまり

int main() {

	...

	return 0;
}

の間に1万行、命令が書かれている訳ですが
こうなってくると、あの変数はどこで宣言しているのか
あの計算はどこか、エラーが出たけど、エラーはどこの行なのか
探すのはもう嫌ですよね。

そこで処理を分割して、意味のある処理ごとに一つにまとめるための
関数という機能がプログラミングには用意されています。

とりあえずコードを見て行きましょう。

#include <iostream>
using namespace std;

float shouhizei(float v, float t){

	float s = v * t;

	return s;
}

int main() {
	// your code goes here
	
	float value = 296000;
	float tax = 1.08;

	float payment;

	payment = shouhizei(value, tax);		
	
	cout << value << "円の物を税率" << tax << "で買うと" << payment << "円払う" << endl;

	return 0;
}

結果は
296000円の物を税率1.08で買うと319680円払う
と出力されると思います。

今回の新しい部分は

float shouhizei(float v, float t){

	float s = v * t;

	return s;
}

	payment = shouhizei(value, tax);		

ですね。

では、解説して行きましょう。

まず

	payment = shouhizei(value, tax);		

です。

これは=の左側は見たことある形ですね。
今paymentはfloat型なので
=の右側から何かの数値を受け取っているのでしょう。
これはpayment = 0.2 + 0.5;
とかと同じ考え方ですね。=の左辺には=の右辺の計算結果が入ります。

つまり、
=の右辺のshouhizei(value, tax);は何かの計算結果を
float型で左辺に渡しているんだろうと推測できます。

解説するとここでは、自分で作った
shouhizeiという名前の関数を呼び出して、
shouhizei関数にvalueとtaxの中の数値を渡して、
shouhizei関数の中で行われた計算結果を左辺に渡すという処理をしています。

この時、気になるのはshouhizei関数の中では
何をしているのという話なんですが
それは少し前に自分で書いてますね。

つまり

float shouhizei(float v, float t){

	float s = v * t;

	return s;
}

これです。
ここでshouhizei関数の中身を書いてます。

中身をひもといて行くと

まず

float shouhizei(float v, float t){

と、書いてます。
これは

	shouhizei(value, tax);		

で、渡されたvalueとtaxの数値の中身をvとtで受け取るという意味です。
つまり

	shouhizei(value, tax);		

と書くと

float shouhizei(float v, float t){

が呼ばれて、同時に

	v = value;
	t = tax;

と同じことがおきて
valueとtaxの中身の数値をvとtに渡していると思って貰えれば大丈夫です。
この後に

float shouhizei(float v, float t){

	float s = v * t;

	return s;
}

の中身が実行されて

float s = v * t;

が実行されます。
今、vはvalueと同じ296000
tはtaxと同じ1.08になっているので
sはそれらの計算結果の319680になります。
次に

	return s;

です。
return s;はsの数値の中身をshouhizei関数を呼び出した場所に渡すという意味です。

つまりここではshouhizei関数を呼び出したのは

	payment = shouhizei(value, tax);		

の=の右辺なので、=の右辺の値がsと等しくなる。
つまり、319680になるということです。
こうして=の右辺の値が319680になったので
その後は普通に=で右辺の値が左辺に代入されて
paymentの中身は319680になります。

このように、処理のひとまとまりを

#include <iostream>
using namespace std;

float shouhizei(float v, float t){
	...
}

int main() {
	...
}


のようにint main(){ }
の外側に書いて呼び出すこと関数を作成する(呼び出す)といいます。
この程度の分量の処理だと、関数のありがたみは
あまり実感してもらえないかもしれませんが
長くなると非常に便利なので覚えておいて貰えばと思います。
一先ず、関数って言うのがあって、処理をまとめられて
関数にはshouhizei(value, tax)みたいに( )で囲んで数値を渡すんだな
と思ってもらえれば大丈夫です。


http://hariganet.hatenablog.com/entry/2014/03/28/221857