C#入門⑯ 引数と戻り値 ── メソッドに渡す・受け取る
前回は「メソッド(処理に名前をつけてまとめる)」をやりました。
今回は、メソッドをぐっと便利にする2つのしくみ。引数(ひきすう)と戻り値(もどりち)です。
引数はメソッドに「渡す」もの、戻り値はメソッドから「返ってくる」ものです。
前回のメソッドの、もの足りないところ
前回のメソッドは、いつも同じことをするだけでした。
void Greet()
{
Console.WriteLine("ようこそ");
}
これだと、いつも「ようこそ」としか言えません。でも、「山田さん、ようこそ」のように、相手によって変えられたら便利ですよね。
そこで使うのが「引数」です。メソッドに情報を渡して、その内容によって動きを変えられます。
料理でいうなら、下ごしらえメソッドに「この食材を」と渡すイメージ。渡す食材によって、下ごしらえの中身が変わります。
引数 ── メソッドに渡す
名前を渡せるように、メソッドを書き換えてみます。
void Greet(string name)
{
Console.WriteLine(name + "さん、ようこそ");
}
カッコの中に string name が増えました。これが引数です。「呼び出すときに、文字列をひとつ渡してね。それを name で受け取ります」という意味です。
呼び出すときは、カッコの中に渡す値を書きます。
Greet("山田"); // 山田さん、ようこそ
Greet("田中"); // 田中さん、ようこそ
渡した名前によって、表示が変わりました。同じメソッドなのに、渡す値しだいで結果が変わる。これが引数の力です。
戻り値 ── メソッドから返ってくる
もうひとつが「戻り値」です。メソッドに何かを計算させて、その結果を受け取るしくみです。
たとえば「2つの数を足して、結果を返す」メソッド。
int Add(int a, int b)
{
return a + b;
}
前回までと、2つ違う点があります。
- 先頭が
voidではなくint… 「整数を返しますよ」という意味 return a + b;… 計算結果を 返す(これが戻り値)
return(リターン)は、「この値を、呼び出し元に返す」という命令です。
呼び出すと、結果を受け取れます。
int answer = Add(3, 5);
Console.WriteLine(answer); // 8
Add(3, 5) が 8 を返し、それが answer の箱に入りました。
実はこれ、今まで使ってきた int.Parse()(第5回)と同じしくみです。あれも「文字列を渡すと、整数を返してくれる」メソッドでした。
void と、型を返すメソッド
ここで、void の正体がはっきりします。
void… 結果を返さないメソッド(表示するだけ、など)intやstring… その型の値を返すメソッド
前回の Greet は、表示するだけで何も返さないので void。
今回の Add は、計算結果(整数)を返すので int。
「このメソッドは、何か結果を返すのか?返すなら何の型か?」。先頭の部分が、それを表しているのです。
組み合わせると
引数と戻り値を組み合わせると、メソッドは「情報を受け取って、処理して、結果を返す」という、ひとつの部品になります。
int Add(int a, int b) // a と b を受け取り(引数)
{
return a + b; // 足した結果を返す(戻り値)
}
これはまさに、第3回や第5回で出てきた「入力 → 処理 → 出力」の形です。引数で入力を受け取り、戻り値で出力を返す。メソッドは、その小さな単位なんです。
つまずきポイント
初心者がよく間違えるのが、戻り値を受け取り忘れることです。
Add(3, 5); // 計算したけど、結果をどこにも入れていない
Console.WriteLine(answer); // answer なんて無い!エラー
Add(3, 5) は8を返しますが、それを箱に入れないと、結果は消えてしまいます。
int answer = Add(3, 5); // 結果を answer に受け取る(正しい)
Console.WriteLine(answer);
「return で返した値は、呼び出し側で受け取る」。返すだけでなく、受け取るのもセット。そう覚えておきましょう。
まとめ
引数は渡すもの、戻り値は返ってくるもの。
int Add(int a, int b) // 引数:a, b を受け取る
{
return a + b; // 戻り値:結果を返す
}
int answer = Add(3, 5); // 渡して、受け取る
- 引数 … メソッドに情報を渡す(カッコの中)
- 戻り値 … メソッドから結果を返す(
return) voidは返さない、型がついていれば返す- 返した値は、呼び出し側で受け取る
次回は、変数が「どこまで使えるか」という スコープ の話です。メソッドを理解した今だからこそ、すっきり分かります。

