C++超入門⑤ 関数で処理を分けよう
関数、引数、戻り値、void、変数のスコープを学び、長い処理を役割ごとに分けます。
第5回では、処理をひとまとまりにする関数を学びます。
同じ処理を何度も使いたいときや、長いプログラムを読みやすく分けたいときに役立ちます。
この回でできるようになること
- 関数を作って呼び出す
- 関数へ値を渡す
- 計算結果を呼び出し元へ返す
- 変数を使える範囲を知る
関数の基本
2つの整数を足す関数を作ってみましょう。
int add(int a, int b) {
int result = a + b;
return result;
}
| 部分 | 意味 |
|---|---|
| int add | int型の値を返すaddという関数 |
| int a, int b | 関数が受け取る値 |
| return result | 計算結果を呼び出し元へ返す |
関数が受け取るaとbを引数、関数が返す結果を戻り値と呼びます。
関数を呼び出す
作った関数は、main関数などから呼び出します。
#include <iostream>
int add(int a, int b) {
return a + b;
}
int main() {
int answer = add(3, 5);
std::cout << answer << '\n';
return 0;
}
add(3, 5)を実行すると、戻り値の8がanswerへ入ります。
この例では、add関数をmain関数より前に書いています。先に書いておくと、main関数からadd関数の存在が分かります。
値を返さないvoid関数
画面表示だけを行い、値を返さない関数にはvoidを使います。
#include <iostream>
#include <string>
void greet(std::string name) {
std::cout << "こんにちは、" << name << "さん。\n";
}
int main() {
greet("Aoi");
greet("Ren");
return 0;
}
同じ表示処理を、名前だけ変えて何度でも使えます。
trueかfalseを返す関数
偶数か調べる処理も関数にできます。
bool isEven(int number) {
return number % 2 == 0;
}
numberを2で割った余りが0ならtrue、そうでなければfalseを返します。
if (isEven(8)) {
std::cout << "偶数です。\n";
}
関数名を「何を調べる関数か」が分かる名前にすると、コードを文章のように読めます。
変数を使える範囲
変数を使える範囲をスコープと呼びます。
void sample() {
int number = 10;
}
numberはsample関数の波かっこの中だけで使えます。main関数から直接使うことはできません。
必要な値は引数で渡し、結果は戻り値で返すと、関数同士の関係が分かりやすくなります。
小さな練習
2つの整数を受け取り、大きい方を返すmaxNumber関数を作ってください。
関数の中でif文を使います。同じ値だった場合は、どちらを返しても構いません。
模範解答
#include <iostream>
int maxNumber(int a, int b) {
if (a >= b) {
return a;
}
return b;
}
int main() {
std::cout << maxNumber(12, 7) << '\n';
return 0;
}
解説
aがb以上ならaを返します。returnが実行されると関数はそこで終了するため、条件に当てはまらない場合だけ最後のreturn bへ進みます。
まとめ
- 関数を使うと、処理を役割ごとに分けられます。
- 引数は関数へ渡す値、戻り値は関数から返る値です。
- 変数には使える範囲があり、その範囲をスコープと呼びます。