Day 16 のゴールと全体イメージ
Day 16 では、メソッドを一気に「実用レベル」に引き上げる重要なテーマである 引数と戻り値 を学びます。 昨日の Day 15 では「処理のかたまりに名前をつける」ことを学びましたが、 今日はそこに「入力(引数)」と「出力(戻り値)」を加えて、
「メソッドに値を渡して、計算した結果を受け取る」
という流れを身につけていきます。
学ぶことは次のとおりです。
- 引数
- 戻り値
return- 複数引数
これらをステップバイステップでかみ砕きながら、 初心者の方でも自然に「メソッドで計算して結果を返す」コードを書けるようになることを目指します。
引数とは何か
「メソッドに渡す入力データ」
引数(ひきすう)とは、
「メソッドに渡すための値」
のことです。
メソッドは「処理のかたまり」ですが、 その処理が「何を対象にするか」を指定するために、引数を使います。
例えば、
- 「この名前で挨拶してほしい」
- 「この 2 つの数の合計を計算してほしい」
- 「このメッセージを何回表示してほしい」
といったときに、メソッドに値を渡します。
引数付きメソッドの基本形
1 つの引数を持つメソッド
基本形は次のようになります。
戻り値の型 メソッド名(引数の型 引数名)
{
// 引数を使った処理
}
C#まずは戻り値なし(void)で、引数だけを持つメソッドを見てみます。
static void Greet(string name)
{
Console.WriteLine($"こんにちは、{name} さん!");
}
C#この Greet メソッドは、
nameという引数を受け取り- その
nameを使って挨拶文を表示する
という役割を持っています。
呼び出し側は次のようになります。
static void Main(string[] args)
{
Greet("太郎"); // name に "太郎" が渡されます
Greet("花子"); // name に "花子" が渡されます
Console.ReadLine();
}
C#重要ポイント:
- 引数は「メソッドに渡す入力データ」です。
- メソッド定義側では「型」と「名前」を書きます(例:
string name)。 - 呼び出し側では、実際の値(例:
"太郎")を渡します。
戻り値とは何か
「メソッドから返される結果」
戻り値(もどりち)とは、
「メソッドが処理を行った結果として、呼び出し元に返す値」
のことです。
例えば、
- 「2 つの数の合計」
- 「BMI の計算結果」
- 「合格か不合格かの判定結果」
などを、メソッドの戻り値として返すことができます。
戻り値付きメソッドの基本形
return で値を返す
戻り値付きメソッドの基本形は次のようになります。
戻り値の型 メソッド名(引数リスト)
{
// 何らかの計算や処理
return 戻り値; // 戻り値の型と一致する値を返します
}
C#例えば、2 つの整数の合計を計算するメソッドは次のようになります。
static int Add(int a, int b)
{
int result = a + b; // 合計を計算します
return result; // 計算結果を呼び出し元に返します
}
C#呼び出し側は次のようになります。
static void Main(string[] args)
{
int x = 5;
int y = 10;
int sum = Add(x, y); // Add(5, 10) の結果が sum に入ります
Console.WriteLine($"合計:{sum}");
Console.ReadLine();
}
C#重要ポイント:
- メソッドの先頭に書く「戻り値の型」(ここでは
int)と、returnで返す値の型は一致している必要があります。 returnは「この値を返して、メソッドの処理を終了する」という意味を持ちます。- 呼び出し側では、戻り値を変数に受け取ったり、そのまま使ったりできます。
void と戻り値ありの違い
「返すものがあるかどうか」
voidメソッド- 戻り値を返しません。
- 「何かをする」ことが目的のメソッドです(例:表示、ログ出力など)。
- 戻り値ありメソッド(例:
int、stringなど)returnで値を返します。- 「計算して結果を返す」ことが目的のメソッドです。
イメージとしては、
void→ 「作業だけして終わる人」- 戻り値あり → 「作業して結果を持って帰ってくる人」
と考えると分かりやすいです。
例1:BMI を計算するメソッド
引数と戻り値を両方使う
少し実用的な例として、BMI を計算するメソッドを作ってみます。
BMI の計算式は次のとおりです。
BMI = 体重(kg) ÷ 身長(m) ÷ 身長(m)
これをメソッドにすると、次のようになります。
using System;
class Program
{
// BMI を計算するメソッド
static double CalculateBmi(double weightKg, double heightM)
{
double bmi = weightKg / (heightM * heightM); // BMI を計算します
return bmi; // 計算結果を返します
}
static void Main(string[] args)
{
Console.WriteLine("体重(kg)を入力してください:");
double weight = double.Parse(Console.ReadLine());
Console.WriteLine("身長(m)を入力してください:");
double height = double.Parse(Console.ReadLine());
// メソッドに体重と身長を渡して、BMI を計算してもらいます
double bmi = CalculateBmi(weight, height);
Console.WriteLine($"あなたの BMI は {bmi:F2} です。"); // 小数点以下 2 桁で表示
Console.ReadLine();
}
}
C#ここでのポイント:
- 引数として「体重」と「身長」を渡しています。
- メソッドの中で BMI を計算し、その結果を戻り値として返しています。
- 呼び出し側では、戻り値を
bmi変数に受け取って表示しています。
このように、
「入力(引数) → 処理 → 出力(戻り値)」
という流れが、メソッドの基本的な役割です。
複数引数とは
「カンマで区切って複数の値を渡す」
メソッドは、引数を 1 つだけでなく、複数持つことができます。
定義側では、次のようにカンマで区切って書きます。
static int Add(int a, int b, int c)
{
return a + b + c;
}
C#呼び出し側では、同じ順番で値を渡します。
int result = Add(1, 2, 3); // a=1, b=2, c=3 が渡されます
C#重要ポイント:
- 引数は「型」と「名前」をセットで書き、複数ある場合はカンマで区切ります。
- 呼び出し側では、定義と同じ順番で値を渡します。
- 「何を渡すか」「何を返すか」を意識して設計すると、メソッドの役割が明確になります。
例2:2 つの数値の大小を判定するメソッド
戻り値で「結果」を返す
次のような仕様を考えてみます。
「2 つの整数を受け取り、大きい方の値を返す。」
これをメソッドにすると、次のようになります。
using System;
class Program
{
// 2 つの整数のうち、大きい方を返すメソッド
static int Max(int a, int b)
{
if (a >= b)
{
return a; // a の方が大きい(または同じ)場合は a を返します
}
else
{
return b; // b の方が大きい場合は b を返します
}
}
static void Main(string[] args)
{
Console.WriteLine("1つ目の整数を入力してください:");
int x = int.Parse(Console.ReadLine());
Console.WriteLine("2つ目の整数を入力してください:");
int y = int.Parse(Console.ReadLine());
int bigger = Max(x, y); // Max メソッドで大きい方を判定してもらいます
Console.WriteLine($"大きい方の値は {bigger} です。");
Console.ReadLine();
}
}
C#ここでのポイント:
- 引数として 2 つの整数を受け取っています。
- 条件分岐で「どちらが大きいか」を判定し、
returnで結果を返しています。 - 呼び出し側では、戻り値を
bigger変数に受け取って表示しています。
return の役割をもう少し深掘りする
「値を返す」と「処理を終える」
return には 2 つの役割があります。
- 値を返す(戻り値ありメソッドの場合)
- メソッドの処理をそこで終了する
例えば、次のようなメソッドを考えてみます。
static int SafeDivide(int a, int b)
{
if (b == 0)
{
Console.WriteLine("0 で割ることはできません。");
return 0; // ここでメソッドを終了し、0 を返します
}
int result = a / b;
return result; // 正常な結果を返します
}
C#ポイント:
b == 0のときにreturn 0;が実行されると、その時点でメソッドは終了します。- それ以降の処理(
int result = a / b;など)は実行されません。 returnは「ここで終わり」という区切りの役割も持っています。
練習テンプレート:自分で引数と戻り値を設計してみる
合計と平均を計算するメソッド
using System;
class Program
{
// 2 つの数値の合計を返すメソッド
static int Add(int a, int b)
{
return a + b;
}
// 2 つの数値の平均を返すメソッド
static double Average(int a, int b)
{
int sum = Add(a, b); // 先ほどの Add メソッドを再利用します
double avg = (double)sum / 2;
return avg;
}
static void Main(string[] args)
{
Console.WriteLine("1つ目の整数を入力してください:");
int x = int.Parse(Console.ReadLine());
Console.WriteLine("2つ目の整数を入力してください:");
int y = int.Parse(Console.ReadLine());
int sum = Add(x, y);
double avg = Average(x, y);
Console.WriteLine($"合計:{sum}");
Console.WriteLine($"平均:{avg}");
Console.ReadLine();
}
}
C#このテンプレートでは、
- 引数と戻り値を持つメソッドを 2 つ定義し
- 片方のメソッド(
Average)の中で、もう片方のメソッド(Add)を再利用しています。
「メソッド同士を組み合わせる」感覚を育てるのに良い練習になります。
Day 16 のまとめ
Day 16 では、
- 引数:メソッドに渡す入力データ
- 戻り値:メソッドが処理した結果として返す値
return:値を返し、メソッドの処理を終了する命令- 複数引数:カンマで区切って複数の値を渡す
という 4 つの軸で、メソッドを「入力と出力を持つ部品」として扱う方法を学びました。
これにより、メソッドは単なる「処理のかたまり」から、
「値を受け取り、計算して、結果を返す小さな機能」
へと進化します。
ぜひ、
- 自分で「どんな入力を受け取って、どんな結果を返したいか」を考えてメソッドを設計してみる
- 引数の数や型を変えて、いろいろなパターンを試してみる
- 既に書いた処理を「引数と戻り値を持つメソッド」に切り出してみる
といった練習を通して、「メソッドを使ってプログラムを組み立てる力」を少しずつ育てていってください。
