C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
生徒
「C#でメソッドに値を渡したり、結果を戻したりする方法ってありますか?」
先生
「はい、C#では『引数(ひきすう)』と『戻り値(もどりち)』を使って、メソッドとやり取りできますよ。」
生徒
「引数とか戻り値って難しそう…具体的にはどう使うんですか?」
先生
「大丈夫です!身近な例と一緒に、わかりやすく説明していきますね。」
1. 引数と戻り値って何?
引数(ひきすう)はメソッドに「入力する情報」、戻り値(もどりち)はメソッドから「受け取る答え」です。C#のメソッドは、この“入ってくる値(引数)”と“出ていく値(戻り値)”でやり取りします。
身近な例に置き換えると、電卓に数字を入れて「=」を押すと結果が出ますよね。入れた数字が引数、表示された結果が戻り値です。料理なら、材料が引数、できあがった料理が戻り値というイメージです。
文法的には、メソッド名の前に「戻り値の型」を書き、丸かっこの中に「引数の型と名前」を並べます。引数は0個でも複数でもOK。戻り値がない場合はvoidを使います(詳しくは後で説明します)。
初心者向けの小さな例です。受け取った文字列をそのまま返すだけのメソッドで、「引数」と「戻り値」の流れを確かめてみましょう。
string Echo(string text)
{
// 受け取った文字列(引数)をそのまま返す(戻り値)
return text;
}
string result = Echo("C#楽しい!");
Console.WriteLine(result);
C#楽しい!
この例では、textが引数、Echoが返している値が戻り値です。C#の基本である「入れる→処理する→受け取る」の流れをまずは押さえておきましょう。
2. 引数を使ったメソッドの基本
メソッドに値を渡す「引数」は、型 と 名前のセットで定義します。C#では、呼び出し時に渡す値の型と順番が定義と一致していることが大切です。ここでは戻り値は使わず、画面に結果を表示するだけのシンプルな例で、引数の動きをはっきりさせましょう。
次の例は、2つの数を足して表示するメソッドです。int型の引数を2つ受け取り、内部で合計してConsole.WriteLineで出力します。数字を直接渡しても、変数に入れてから渡しても同じように動作します。
void AddNumbers(int a, int b)
{
// 受け取った2つの値(引数)を使って処理する
int sum = a + b;
Console.WriteLine("合計は " + sum + " です。");
}
// 1) 直接値を渡す(リテラル)
AddNumbers(3, 5);
// 2) 変数に入れてから渡す
int price = 120;
int tax = 10;
AddNumbers(price, tax);
// 3) 繰り返しの中で使う(同じメソッドを何度でも呼び出せる)
for (int i = 1; i <= 3; i++)
{
AddNumbers(i, i + 1);
}
合計は 8 です。
合計は 130 です。
合計は 3 です。
合計は 5 です。
合計は 7 です。
ポイントは「引数はメソッドに情報を届ける入口」だということ。定義側では(int a, int b)のように型と名前を用意し、呼び出し側ではその順番に合わせて値を渡します。これを押さえておくと、次の「戻り値」を扱う章も理解しやすくなります。
3. 戻り値を使うメソッドの基本
次は、計算した結果を返すメソッドです。呼び出し元に結果(戻り値)を返して、それを使うことができます。
int Multiply(int x, int y)
{
return x * y;
}
int result = Multiply(4, 7);
Console.WriteLine("掛け算の結果は " + result + " です。");
掛け算の結果は 28 です。
returnは、メソッドの結果として値を返すキーワードです。Multiplyメソッドはint型の値(整数)を返すと宣言しています。
4. 引数と戻り値を組み合わせて使おう
実際のプログラムでは、引数と戻り値を組み合わせることで、再利用しやすく柔軟なコードになります。
int CalculateTotalPrice(int price, int quantity)
{
int total = price * quantity;
return total;
}
int totalPrice = CalculateTotalPrice(500, 3);
Console.WriteLine("合計金額は " + totalPrice + " 円です。");
合計金額は 1500 円です。
このように、商品価格(引数)と個数(引数)を渡して、合計金額(戻り値)を計算する処理を作れます。
5. 引数がないメソッドと戻り値がないメソッド
引数も戻り値もないメソッドも作ることができます。
void ShowGreeting()
{
Console.WriteLine("こんにちは!ようこそC#の世界へ。");
}
ShowGreeting();
こんにちは!ようこそC#の世界へ。
void(ボイド)とは「何も返さない」という意味です。戻り値がないときに使います。
6. メソッドの中で引数を使って処理を変える
引数の値によって、メソッドの動作を変えることができます。
void GreetByTime(int hour)
{
if (hour < 12)
{
Console.WriteLine("おはようございます!");
}
else if (hour < 18)
{
Console.WriteLine("こんにちは!");
}
else
{
Console.WriteLine("こんばんは!");
}
}
GreetByTime(9);
GreetByTime(15);
GreetByTime(20);
おはようございます!
こんにちは!
こんばんは!
このように引数があると、時間帯ごとに違うメッセージを表示するなど、柔軟な処理が可能になります。
7. よくある間違いと注意点
- 引数の数や順番がメソッドの定義と合っていないとエラーになります。
- 戻り値があるメソッドは、
returnで正しく値を返す必要があります。 voidを使ったメソッドではreturnの後に値を返してはいけません。
最初は戸惑うかもしれませんが、何度も書いているうちに自然と使いこなせるようになります。
まとめ
ここまで、C#の基本である引数と戻り値について、実際のサンプルや身近なたとえ話を交えながらゆっくり整理してきました。最初に聞くと、専門用語が並んでいて難しそうに見えるかもしれませんが、考え方そのものはとてもシンプルで、日常の動作に置き換えるとイメージしやすくなります。たとえば、電卓に数字を入れて結果が返ってくる流れ、料理の材料を渡して料理ができあがる流れ、注文して商品が届く流れなど、どれも「入力して、処理が行われて、結果を受け取る」という流れです。C#のメソッドもまったく同じで、引数が入力、戻り値が結果という役割を持っています。
プログラムの世界では、小さな処理をひとつずつ分けて、必要なときに呼び出すことで効率的に作業が進みます。もし引数や戻り値を使わずにすべての処理を書こうとすると、同じ内容を何度も繰り返し書くことになり、修正しづらく、読みづらく、バグも増えやすくなります。そこで、メソッドという「道具」を用意して、必要な情報だけを渡して、処理した結果を返してもらう仕組みがとても大事になります。特に、値を渡して処理結果を返すという形は、どのようなプログラムでも必ず使う考え方なので、この機会にしっかり押さえておくと、後の学習が一気に楽になります。
たとえば、計算をするだけの簡単なプログラムでも、実際には「値を渡す」「処理する」「結果を受け取る」という流れが自然に行われています。次の短いサンプルは、これまで学んだ内容をひとつにまとめたものです。二つの整数を受け取って合計を計算し、結果として戻り値で返し、さらにその戻り値を別の部分で使っています。ひとつひとつの動きが見えるように、できるだけシンプルな形で書いてみましょう。
int Add(int a, int b)
{
int result = a + b;
return result;
}
int total = Add(10, 20);
Console.WriteLine("合計は " + total + " です。");
引数として渡した「10」と「20」はメソッドに届けられ、内部で計算されて「30」という答えが戻り値として返ってきます。そして、返ってきた結果は変数に入れて利用できます。この仕組みはとても単純ですが、プログラムが複雑になるほど、引数と戻り値が活躍する場面はどんどん増えます。注文を管理する処理、点数を計算する処理、画面に表示する文章を作る処理など、さまざまな作業を小さなメソッドに分けることで、読みやすく整理されたコードを書くことができます。
また、姿を変えて応用される場面も多くあります。たとえば、戻り値をそのまま表示するのではなく、別のメソッドに渡すこともできます。あるメソッドが計算だけを担当し、別のメソッドが表示を担当するという形です。この分け方は非常に実践的で、後から処理を変更したいときにも強い仕組みになります。
int GetScore(int japanese, int math, int english)
{
return japanese + math + english;
}
void ShowMessage(int score)
{
Console.WriteLine("三教科の合計点は " + score + " 点です。");
}
int totalScore = GetScore(70, 80, 65);
ShowMessage(totalScore);
この例では、計算と表示が分かれています。三教科の点数を足す役割はGetScoreが担当し、結果を画面に出す役割はShowMessageが担当します。ひとつのメソッドに全部詰め込むよりも、役割がきれいに分かれていて分かりやすい形になっています。もし、あとで計算方法を変更したくなった場合でも、表示部分に影響を与えずに修正することができます。
このように、引数と戻り値をきちんと意識してメソッドを作れるようになると、プログラム全体が見通しやすくなり、他の人が読んでも理解しやすくなります。初心者のうちは「なんとなく動けばいい」と考えてしまいがちですが、コードが増えるほど、後から内容を読み返すことが多くなるので、早い段階から整理された書き方に慣れておくと大きな力になります。
さらに、同じ処理を繰り返し使う場面でも強い味方になります。引数で値を変えるだけで、同じメソッドを何度でも使い回すことができるので、手間を減らしつつ間違いを防ぐことができます。複数の商品の合計金額を計算する場合でも、一度メソッドを作ってしまえば、金額と個数を渡すだけで何度でも計算できます。
int Price(int price, int count)
{
return price * count;
}
int a = Price(120, 2);
int b = Price(100, 3);
Console.WriteLine("一つ目の合計は " + a + " 円です。");
Console.WriteLine("二つ目の合計は " + b + " 円です。");
値段と個数が違っても、計算の仕組みは同じなので、メソッドとしてまとめるととても便利になります。こうした考え方は、プログラムが大きくなったときに、読みやすさと修正しやすさに大きく関わってきます。小さな積み重ねに見えますが、それがプログラミングにおける大事な土台になります。
そして、引数と戻り値を学ぶことで、プログラムの流れが少しずつ立体的に見えるようになります。「どこから値が渡されて、どこで計算が行われ、どこに結果が戻っていくのか」という視点を持つと、一つ一つのコードの意味が分かりやすくなります。初めのうちは、手を動かしながら、ゆっくりと理解していくことが大切です。うまく書けなくても焦る必要はありません。実際に動かしながら試していくうちに、自然と慣れていきます。
もし躓いたときは、シンプルな形に戻して考えると、解決しやすくなります。「値を受け取る」「処理する」「返す」この三つの流れさえ押さえていれば大丈夫です。むずかしい専門用語にとらわれず、身近なイメージと結びつけながら考えてみてください。
生徒
「引数と戻り値って、なんとなく複雑だと思っていたけど、電卓や料理の例で考えるとすごく分かりやすかったです。」
先生
「そうでしょう。プログラミングは、身近な動きとつながっている部分が多いので、イメージができると理解が進みやすいんです。」
生徒
「メソッドを分けると、同じ処理を何度も書かなくていいし、あとから修正しやすいというのも納得です。」
先生
「その通りです。最初は小さなコードでも、積み重なるほど差が出ますよ。引数と戻り値を意識しておけば、読みやすくてミスの少ないプログラムに近づきます。」
生徒
「今日は基本の形が分かったので、次は自分でいろいろ作ってみます!」
先生
「良い意気込みです。難しく考えすぎず、楽しみながら試していきましょう。」
理解度のクイズ問題
空欄の★に当てはまる内容を答えてください。
int Multiply(int x, int y)
{
return x * y;
}
int result = Multiply(4, 7);
Console.WriteLine("計算結果は " + result + " です。");
引数=メソッドに渡すデータ。
・戻り値=メソッドが返すデータ。
・キーワード:C# メソッドの基礎、引数と戻り値の違い、プログラミング入門。