C#のreturn文とは?戻り値・使い方・エラー例を初心者向けにわかりやすく解説

はじめに

C#を学び始めると、メソッドの中でよく登場するのがreturn文です。returnは、メソッドの処理を終了したり、計算結果などの値を呼び出し元へ返したりするために使います。

たとえば、数値を足し算するメソッドを作ったとき、その計算結果を外側で使いたい場合があります。そのときに必要になるのがreturnです。

C#
int Add(int a, int b)
{
return a + b;
}

この例では、a + bの結果をreturnで返しています。C#のreturn文は基本的な文法ですが、戻り値の型、voidメソッド、条件分岐、エラーの原因など、初心者がつまずきやすいポイントも多くあります。

この記事では、C#のreturn文とは何か、戻り値との関係、基本的な使い方、よくあるエラー例まで、初心者向けにわかりやすく解説します。

1. C#のreturn文とは?

1-1. return文の基本的な役割

C#のreturn文には、大きく分けて次の2つの役割があります。

1つ目は、メソッドの処理を終了することです。returnが実行されると、その時点でメソッドの処理は終わります。

2つ目は、呼び出し元に値を返すことです。戻り値のあるメソッドでは、returnの後ろに値や式を書き、その結果を呼び出し元へ渡します。

C#
int GetNumber()
{
return 10;
}

このメソッドは、呼び出されると10を返します。

C#
int result = GetNumber();
Console.WriteLine(result);

実行結果は次のようになります。

C#
10

このように、returnは「メソッドを終わらせる」「値を返す」という2つの重要な役割を持っています。

1-2. メソッドの処理を終了する仕組み

return文が実行されると、その後に書かれている処理は実行されません。

C#
void ShowMessage()
{
Console.WriteLine("開始");

return;

Console.WriteLine("終了");
}

このコードでは、return;が実行された時点でShowMessageメソッドは終了します。そのため、"終了"は表示されません。

ただし、上のようにreturnの後に通常の処理を書くと、C#では「到達不能コード」としてエラーまたは警告になることがあります。

returnは、メソッドの中で「ここで処理を終える」という明確な合図です。

1-3. 戻り値を呼び出し元に返す意味

戻り値とは、メソッドが処理した結果として呼び出し元に返す値のことです。

C#
int Square(int number)
{
return number * number;
}

このメソッドは、受け取った数値を2乗して返します。

C#
int answer = Square(5);
Console.WriteLine(answer);

実行結果は次の通りです。

C#
25

Square(5)を呼び出すと、メソッド内で5 * 5が計算され、その結果である25returnによって呼び出し元に返されます。

つまり、returnはメソッドの中で作った結果を外側へ渡すための仕組みです。

1-4. return文を使う場面と使わない場面

return文を使う代表的な場面は、メソッドの結果を呼び出し元で利用したいときです。

C#
int Add(int x, int y)
{
return x + y;
}

このようなメソッドでは、足し算の結果を外側で使えるようにreturnします。

一方で、画面に文字を表示するだけ、ファイルに保存するだけ、状態を変更するだけといった処理では、戻り値を返さないvoidメソッドにすることもあります。

C#
void PrintHello()
{
Console.WriteLine("Hello");
}

このメソッドは文字を表示するだけなので、値を返す必要はありません。

ただし、voidメソッドでも処理を途中で終了したい場合にはreturn;だけを書くことができます。

C#
void CheckAge(int age)
{
if (age < 0)
{
return;
}

Console.WriteLine($"年齢は{age}歳です");
}

このように、戻り値が必要な場面ではreturn 値;を使い、処理を終了するだけならreturn;を使います。

2. C#における戻り値の基本

2-1. 戻り値とは何か

戻り値とは、メソッドが呼び出し元に返す結果のことです。C#では、メソッドを定義するときに戻り値の型を指定します。

C#
int GetAge()
{
return 20;
}

この例では、intが戻り値の型です。つまり、このメソッドは整数を返すという意味になります。

戻り値を使うと、メソッドの処理結果を変数に代入したり、別の処理に利用したりできます。

C#
int age = GetAge();
Console.WriteLine(age);

戻り値は、メソッドを部品として使いやすくするための重要な仕組みです。

2-2. 戻り値の型とメソッドの関係

C#では、メソッドの戻り値の型とreturnで返す値の型を一致させる必要があります。

C#
int GetNumber()
{
return 100;
}

この場合、メソッドの戻り値の型はintなので、returnで返す値も整数である必要があります。

次のようなコードはエラーになります。

C#
int GetNumber()
{
return "100";
}

"100"は文字列なので、int型の戻り値として返すことはできません。

戻り値の型とreturnで返す値の型は、C#の基本として必ず意識しましょう。

2-3. int・string・boolなどを返す例

C#では、さまざまな型の値をreturnで返せます。

intを返す例です。

C#
int GetPrice()
{
return 1500;
}

stringを返す例です。

C#
string GetName()
{
return "田中";
}

boolを返す例です。

C#
bool IsAdult(int age)
{
return age >= 18;
}

boolを返すメソッドは、条件判定によく使われます。

C#
if (IsAdult(20))
{
Console.WriteLine("成人です");
}

このように、戻り値の型によって、メソッドが返す情報の種類が変わります。

2-4. voidメソッドでは戻り値を返さない

voidは「戻り値がない」ことを表す型です。

C#
void ShowMessage()
{
Console.WriteLine("メッセージを表示します");
}

voidメソッドでは、次のように値を返すことはできません。

C#
void ShowMessage()
{
return "Hello";
}

これはエラーになります。voidメソッドでは戻り値を返さないため、returnの後ろに値を書くことはできません。

ただし、処理を途中で終了するためにreturn;だけを書くことはできます。

C#
void ShowMessage(string message)
{
if (message == "")
{
return;
}

Console.WriteLine(message);
}

2-5. return値を変数で受け取る方法

戻り値のあるメソッドを呼び出すと、その結果を変数で受け取ることができます。

C#
int Add(int a, int b)
{
return a + b;
}

int result = Add(3, 5);
Console.WriteLine(result);

実行結果は次のようになります。

C#
8

Add(3, 5)の結果がreturnで返され、その値がresultに代入されます。

戻り値は、変数に代入するだけでなく、直接別のメソッドに渡すこともできます。

C#
Console.WriteLine(Add(10, 20));

この場合、Add(10, 20)の戻り値である30がそのまま表示されます。

3. return文の基本的な書き方

3-1. 値を返すreturn文の構文

戻り値のあるメソッドでは、次のようにreturnの後ろに返したい値を書きます。

C#
return ;

実際のコードでは次のようになります。

C#
int GetNumber()
{
return 10;
}

式をそのまま書くこともできます。

C#
int Add(int a, int b)
{
return a + b;
}

変数を返すこともできます。

C#
int Add(int a, int b)
{
int result = a + b;
return result;
}

どちらの書き方でも、呼び出し元には計算結果が返されます。

3-2. voidメソッドでreturnだけを書く方法

voidメソッドでは戻り値を返せませんが、処理を途中で終了するためにreturn;を書くことができます。

C#
void PrintName(string name)
{
if (name == "")
{
return;
}

Console.WriteLine(name);
}

この例では、nameが空文字の場合、何も表示せずにメソッドを終了します。

return;は、エラーを避けたいときや、条件に合わない場合に処理を早めに終わらせたいときに便利です。

3-3. 条件分岐でreturnを使う書き方

returnif文と組み合わせてよく使われます。

C#
string GetResult(int score)
{
if (score >= 60)
{
return "合格";
}

return "不合格";
}

このメソッドでは、点数が60点以上なら"合格"を返し、それ以外なら"不合格"を返します。

returnが実行されるとメソッドは終了するため、elseを書かずに表現することもできます。

C#
string GetResult(int score)
{
if (score >= 60)
{
return "合格";
}

return "不合格";
}

このような書き方は、条件ごとに結果を返したいときに便利です。

3-4. 複数のreturn文を書くときの考え方

C#では、1つのメソッド内に複数のreturn文を書くことができます。

C#
string GetGrade(int score)
{
if (score >= 90)
{
return "A";
}

if (score >= 70)
{
return "B";
}

if (score >= 60)
{
return "C";
}

return "D";
}

このように、条件によって返す値を変えたい場合は、複数のreturn文を使うとわかりやすくなります。

ただし、あまりにも多くのreturn文を書くと、処理の流れが追いにくくなることがあります。初心者のうちは、「どの条件でどの値を返すのか」が読みやすいかを意識しましょう。

3-5. サンプルコードで見る基本パターン

基本的なreturn文のパターンをまとめると、次のようになります。

数値を返すメソッドです。

C#
int GetDouble(int number)
{
return number * 2;
}

文字列を返すメソッドです。

C#
string CreateMessage(string name)
{
return "こんにちは、" + name + "さん";
}

真偽値を返すメソッドです。

C#
bool IsEven(int number)
{
return number % 2 == 0;
}

戻り値なしで処理を終了するメソッドです。

C#
void PrintIfPositive(int number)
{
if (number <= 0)
{
return;
}

Console.WriteLine(number);
}

returnの書き方は、戻り値があるかないかによって変わります。戻り値があるメソッドではreturn 値;voidメソッドでは必要に応じてreturn;を使います。

4. return文の使い方を具体例で解説

4-1. 計算結果をreturnで返す例

計算結果を返すメソッドは、return文の基本的な使い方です。

C#
int Multiply(int a, int b)
{
return a * b;
}

呼び出し側では、戻り値を変数に代入できます。

C#
int result = Multiply(4, 5);
Console.WriteLine(result);

実行結果は次の通りです。

C#
20

メソッドの中で計算を行い、その結果を呼び出し元で使いたい場合は、returnで値を返します。

4-2. 文字列をreturnで返す例

returnでは文字列も返せます。

C#
string GetGreeting(string name)
{
return "こんにちは、" + name + "さん";
}

呼び出し側は次のようになります。

C#
string message = GetGreeting("佐藤");
Console.WriteLine(message);

実行結果は次の通りです。

C#
こんにちは、佐藤さん

文字列を返すメソッドは、メッセージ作成、表示内容の組み立て、名前や説明文の取得などによく使われます。

4-3. true・falseをreturnで返す例

条件判定の結果としてtrueまたはfalseを返すメソッドもよく使います。

C#
bool IsEven(int number)
{
return number % 2 == 0;
}

このメソッドは、数値が偶数ならtrue、奇数ならfalseを返します。

C#
if (IsEven(10))
{
Console.WriteLine("偶数です");
}
else
{
Console.WriteLine("奇数です");
}

return number % 2 == 0;のように、比較式の結果をそのまま返すことができます。

次のように書くこともできます。

C#
bool IsEven(int number)
{
if (number % 2 == 0)
{
return true;
}

return false;
}

ただし、この例では比較式をそのまま返すほうが簡潔です。

4-4. if文と組み合わせて早期終了する例

returnは、条件に合わない場合に早めに処理を終了するためにも使えます。これを早期returnと呼ぶことがあります。

C#
void PrintUserName(string name)
{
if (string.IsNullOrEmpty(name))
{
return;
}

Console.WriteLine("ユーザー名: " + name);
}

この例では、namenullまたは空文字の場合、何も表示せずに処理を終了します。

早期returnを使うと、不要な処理を避けられます。また、条件が合わない場合を先に除外できるため、コードが読みやすくなることもあります。

戻り値があるメソッドでも早期returnは使えます。

C#
string GetUserName(string name)
{
if (string.IsNullOrEmpty(name))
{
return "ゲスト";
}

return name;
}

4-5. switch文や条件式とreturnを組み合わせる例

returnswitch文と組み合わせることもできます。

C#
string GetDayName(int day)
{
switch (day)
{
case 1:
return "月曜日";
case 2:
return "火曜日";
case 3:
return "水曜日";
case 4:
return "木曜日";
case 5:
return "金曜日";
case 6:
return "土曜日";
case 7:
return "日曜日";
default:
return "不明";
}
}

C#では、switch式を使ってより短く書くこともできます。

C#
string GetDayName(int day)
{
return day switch
{
1 => "月曜日",
2 => "火曜日",
3 => "水曜日",
4 => "木曜日",
5 => "金曜日",
6 => "土曜日",
7 => "日曜日",
_ => "不明"
};
}

また、条件演算子を使うこともできます。

C#
string GetResult(int score)
{
return score >= 60 ? "合格" : "不合格";
}

簡単な条件であれば、条件演算子とreturnを組み合わせるとコードを短くできます。ただし、複雑な条件では読みづらくなるため、無理に短くしすぎないことも大切です。

4-6. 配列やListをreturnで返す例

returnでは、intstringだけでなく、配列やListも返せます。

配列を返す例です。

C#
int[] GetNumbers()
{
return new int[] { 1, 2, 3, 4, 5 };
}

呼び出し側では次のように受け取れます。

C#
int[] numbers = GetNumbers();

foreach (int number in numbers)
{
Console.WriteLine(number);
}

List<string>を返す例です。

C#
List<string> GetNames()
{
return new List<string> { "田中", "佐藤", "鈴木" };
}

呼び出し側は次のようになります。

C#
List<string> names = GetNames();

foreach (string name in names)
{
Console.WriteLine(name);
}

複数の値をまとめて返したい場合には、配列やListを戻り値にする方法が便利です。

5. voidメソッドとreturn文の関係

5-1. voidとは何か

voidとは、「戻り値がない」ことを表すキーワードです。

C#
void SayHello()
{
Console.WriteLine("Hello");
}

このメソッドは、画面にHelloと表示するだけで、呼び出し元に値を返しません。

戻り値があるメソッドと比べると、次のような違いがあります。

C#
int GetNumber()
{
return 10;
}

GetNumberintを返しますが、SayHelloは何も返しません。

つまり、voidは「処理はするが、結果の値は返さない」という意味です。

5-2. voidではreturn 値を書けない理由

voidメソッドでは戻り値を返さないため、returnの後ろに値を書くことはできません。

C#
void ShowMessage()
{
return "Hello";
}

このコードはエラーになります。voidメソッドは値を返す約束をしていないため、文字列を返すことはできません。

値を返したい場合は、戻り値の型をvoidではなく、返したい値の型に変更します。

C#
string GetMessage()
{
return "Hello";
}

このように、値を返す必要があるならstringintboolなど、適切な戻り値の型を指定します。

5-3. voidメソッドで処理だけを終了するreturn

voidメソッドでは値を返せませんが、return;だけなら書くことができます。

C#
void PrintScore(int score)
{
if (score < 0)
{
return;
}

Console.WriteLine("点数: " + score);
}

この例では、scoreが0未満の場合、何も表示せずにメソッドを終了します。

return;は、処理を中断したい場合や、条件に合わない場合に便利です。

C#
void Save(string text)
{
if (string.IsNullOrEmpty(text))
{
return;
}

Console.WriteLine("保存しました: " + text);
}

このように、voidメソッドでもreturnは使えます。ただし、値は返せない点に注意しましょう。

5-4. voidと戻り値ありメソッドの使い分け

voidメソッドと戻り値ありメソッドは、目的によって使い分けます。

処理結果を呼び出し元で使いたい場合は、戻り値ありメソッドにします。

C#
int CalculateTax(int price)
{
return price / 10;
}

このメソッドは税額を計算して返すため、戻り値があります。

一方、画面に表示するだけの処理ならvoidで十分です。

C#
void PrintTax(int tax)
{
Console.WriteLine("税額: " + tax);
}

判断の目安は、「そのメソッドの結果を後で使うかどうか」です。結果を使うなら戻り値あり、使わず処理だけ行うならvoidにすると考えるとわかりやすいです。

5-5. 初心者が混同しやすいポイント

初心者が混同しやすいのは、Console.WriteLineで表示することと、returnで値を返すことの違いです。

C#
void ShowNumber()
{
Console.WriteLine(10);
}

このメソッドは10を表示しますが、値を返しているわけではありません。

一方、次のメソッドは10を返します。

C#
int GetNumber()
{
return 10;
}

呼び出し元で値を使えるのは、returnで返した場合です。

C#
int number = GetNumber();
Console.WriteLine(number);

Console.WriteLineは画面に表示する処理、returnは呼び出し元に値を返す処理です。この違いを理解すると、voidと戻り値ありメソッドの使い分けがしやすくなります。

6. return文でよくあるエラーと原因

6-1. 「not all code paths return a value」の原因

C#でreturn文を使うときによく見るエラーに、not all code paths return a valueがあります。これは「すべての処理経路で値が返されていない」という意味です。

たとえば、次のコードはエラーになります。

C#
int GetResult(int score)
{
if (score >= 60)
{
return 1;
}
}

scoreが60以上の場合は1を返します。しかし、60未満の場合は何も返さずにメソッドが終わってしまいます。

intを返すメソッドでは、どの条件でも必ずintの値を返す必要があります。

修正例は次の通りです。

C#
int GetResult(int score)
{
if (score >= 60)
{
return 1;
}

return 0;
}

これで、60以上なら1、それ以外なら0が返されます。

6-2. 戻り値の型が一致しないエラー

メソッドの戻り値の型と、returnで返す値の型が一致しない場合もエラーになります。

C#
int GetNumber()
{
return "10";
}

このコードでは、戻り値の型はintですが、returnしているのはstringです。そのためエラーになります。

修正するには、整数を返します。

C#
int GetNumber()
{
return 10;
}

または、文字列を返したいなら戻り値の型をstringにします。

C#
string GetNumber()
{
return "10";
}

戻り値の型とreturnする値の型は、必ず対応させましょう。

6-3. voidメソッドで値を返そうとした場合のエラー

voidメソッドで値を返そうとするとエラーになります。

C#
void GetMessage()
{
return "Hello";
}

voidは戻り値なしを意味するため、return "Hello";のように値を返すことはできません。

修正方法は2つあります。

値を返したい場合は、戻り値の型を変更します。

C#
string GetMessage()
{
return "Hello";
}

値を返す必要がない場合は、return;だけにします。

C#
void ShowMessage()
{
Console.WriteLine("Hello");
return;
}

ただし、メソッドの最後にあるreturn;は省略できることも多いです。

6-4. returnの後に処理を書いたときの到達不能コード

returnの後に処理を書くと、その処理は実行されません。

C#
int GetNumber()
{
return 10;

Console.WriteLine("ここは実行されません");
}

return 10;が実行された時点でメソッドは終了するため、その後のConsole.WriteLineには到達できません。

このようなコードは、到達不能コードとしてエラーになる場合があります。

修正するには、returnの前に処理を書く必要があります。

C#
int GetNumber()
{
Console.WriteLine("値を返します");
return 10;
}

returnの後の処理は実行されない、という基本を覚えておきましょう。

6-5. if文の片方だけにreturnを書いたときの注意点

if文の片方だけにreturnを書くと、条件によっては値が返されないことがあります。

C#
string GetMessage(bool isMember)
{
if (isMember)
{
return "会員です";
}
}

このコードでは、isMembertrueの場合は値が返ります。しかし、falseの場合は何も返されません。

戻り値があるメソッドでは、すべてのパターンで値を返す必要があります。

修正例です。

C#
string GetMessage(bool isMember)
{
if (isMember)
{
return "会員です";
}

return "会員ではありません";
}

または、elseを使ってもよいです。

C#
string GetMessage(bool isMember)
{
if (isMember)
{
return "会員です";
}
else
{
return "会員ではありません";
}
}

どちらの書き方でも、すべての条件で戻り値が返されます。

6-6. エラーを防ぐためのチェックポイント

return文のエラーを防ぐには、次の点を確認しましょう。

まず、戻り値の型とreturnする値の型が一致しているか確認します。

C#
int GetNumber()
{
return 10;
}

次に、戻り値があるメソッドでは、すべての処理経路で値を返しているか確認します。

C#
bool IsPositive(int number)
{
if (number > 0)
{
return true;
}

return false;
}

また、voidメソッドで値を返していないかも確認しましょう。

C#
void Show()
{
return;
}

最後に、returnの後に不要な処理を書いていないか確認します。

C#
int GetNumber()
{
return 10;
}

return文のエラーは、戻り値の型、すべての分岐、voidとの違いを意識すれば防ぎやすくなります。

7. return文を使うときの注意点

7-1. return後の処理は実行されない

return文が実行されると、メソッドはその場で終了します。そのため、returnより後に書かれた処理は実行されません。

C#
void Test()
{
Console.WriteLine("A");

return;

Console.WriteLine("B");
}

この例では、Aは表示されますが、Bは表示されません。

returnは処理の流れを大きく変える命令です。どのタイミングでメソッドが終了するのかを意識して使いましょう。

7-2. 戻り値の型をメソッド定義と合わせる

returnで返す値は、メソッド定義の戻り値の型と合わせる必要があります。

C#
double GetAverage(int a, int b)
{
return (a + b) / 2.0;
}

この例では、戻り値の型がdoubleなので、小数を返せます。

一方、次のようなコードは型の不一致でエラーになります。

C#
bool IsOk()
{
return "OK";
}

boolを返すメソッドでは、trueまたはfalseを返す必要があります。

C#
bool IsOk()
{
return true;
}

C#は型を重視する言語なので、戻り値の型は必ず確認しましょう。

7-3. 読みやすいreturn文を書くコツ

読みやすいreturn文を書くには、返している値の意味がわかりやすいことが大切です。

たとえば、次のコードは簡潔です。

C#
bool IsAdult(int age)
{
return age >= 18;
}

age >= 18の結果がそのままtrueまたはfalseになるため、読みやすいコードです。

ただし、式が長すぎる場合は、一度変数に入れるとわかりやすくなります。

C#
bool CanBuyTicket(int age, bool hasPermission)
{
bool isAdult = age >= 18;
bool canBuy = isAdult || hasPermission;

return canBuy;
}

無理に1行で書くよりも、意味のある変数名を使ったほうが読みやすくなる場合があります。

7-4. return文を増やしすぎないための考え方

複数のreturn文は便利ですが、増えすぎると処理の流れがわかりにくくなることがあります。

C#
string Check(int value)
{
if (value < 0)
{
return "負の数";
}

if (value == 0)
{
return "ゼロ";
}

if (value > 0)
{
return "正の数";
}

return "不明";
}

この程度であれば問題ありませんが、条件が多くなりすぎる場合は、処理を分けたり、switch式を使ったりすると整理できます。

C#
string CheckStatus(int status)
{
return status switch
{
0 => "未処理",
1 => "処理中",
2 => "完了",
_ => "不明"
};
}

return文の数そのものよりも、「読み手が処理の流れを理解しやすいか」を基準に考えることが大切です。

7-5. 早期returnを使うメリットと注意点

早期returnとは、条件に合わない場合などに、メソッドの早い段階でreturnする書き方です。

C#
void Process(string text)
{
if (string.IsNullOrEmpty(text))
{
return;
}

Console.WriteLine("処理します: " + text);
}

早期returnのメリットは、不要な処理を避けられることです。また、異常な条件を先に除外できるため、後続の処理が読みやすくなります。

次のように、ネストを浅くできる点もメリットです。

C#
void Process(string text)
{
if (string.IsNullOrEmpty(text))
{
return;
}

if (text.Length < 3)
{
return;
}

Console.WriteLine(text);
}

ただし、早期returnが多すぎると、どこで処理が終わるのか追いにくくなる場合もあります。シンプルな条件に使い、複雑になりすぎないように注意しましょう。

8. return文と関連して覚えたいC#の基礎知識

8-1. メソッドとは何か

メソッドとは、処理をひとまとまりにしたものです。C#では、同じ処理を何度も使いたい場合や、処理をわかりやすく分けたい場合にメソッドを作ります。

C#
void SayHello()
{
Console.WriteLine("Hello");
}

このメソッドは、呼び出すとHelloと表示します。

C#
SayHello();

戻り値があるメソッドでは、処理結果をreturnで返します。

C#
int Add(int a, int b)
{
return a + b;
}

return文を理解するには、まずメソッドが「処理をまとめたもの」であることを押さえておく必要があります。

8-2. 引数と戻り値の違い

引数と戻り値は、メソッドでよく使う基本用語です。

引数は、メソッドに渡す値です。

C#
int Add(int a, int b)
{
return a + b;
}

この例では、abが引数です。

戻り値は、メソッドから返ってくる値です。

C#
int result = Add(3, 5);

この例では、Add(3, 5)の結果である8が戻り値です。

つまり、引数は「メソッドに入れる値」、戻り値は「メソッドから出てくる値」です。

8-3. returnとConsole.WriteLineの違い

returnConsole.WriteLineは、初心者が混同しやすいポイントです。

Console.WriteLineは、値を画面に表示するための処理です。

C#
void Show()
{
Console.WriteLine(100);
}

このメソッドは100を表示しますが、呼び出し元に値を返しているわけではありません。

一方、returnは値を呼び出し元に返します。

C#
int GetNumber()
{
return 100;
}

このメソッドは100を返すため、変数で受け取れます。

C#
int number = GetNumber();
Console.WriteLine(number);

Console.WriteLineは表示、returnは値を返す処理です。目的がまったく違うため、区別して覚えましょう。

8-4. returnとbreakの違い

returnbreakも混同しやすい命令です。

returnはメソッド全体を終了します。

C#
void TestReturn()
{
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
return;
}

Console.WriteLine(i);
}

Console.WriteLine("終了");
}

この場合、iが2になった時点でメソッドそのものが終了するため、最後の"終了"も表示されません。

一方、breakはループやswitchを抜けるための命令です。

C#
void TestBreak()
{
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
break;
}

Console.WriteLine(i);
}

Console.WriteLine("終了");
}

この場合、for文は終了しますが、メソッド自体は続くため、最後の"終了"は表示されます。

returnはメソッドを終了、breakはループやswitchを終了、と覚えましょう。

8-5. returnとthrowの違い

returnは、正常な処理結果として値を返したり、メソッドを終了したりするために使います。

C#
int Divide(int a, int b)
{
return a / b;
}

一方、throwは例外を発生させるために使います。エラーや異常な状態を呼び出し元に知らせたい場合に使います。

C#
int Divide(int a, int b)
{
if (b == 0)
{
throw new ArgumentException("0で割ることはできません");
}

return a / b;
}

この例では、bが0の場合はreturnではなくthrowで例外を発生させています。

returnは通常の結果を返すもの、throwは異常を知らせるものです。どちらもメソッドの処理をそこで終了させますが、意味が大きく異なります。

9. 初心者向けのreturn文練習問題

9-1. 数値を2倍にして返すメソッド

まずは、受け取った数値を2倍にして返すメソッドを作ってみましょう。

C#
int DoubleNumber(int number)
{
return number * 2;
}

使い方は次の通りです。

C#
int result = DoubleNumber(5);
Console.WriteLine(result);

実行結果は次のようになります。

C#
10

number * 2の計算結果をreturnで返しています。

9-2. 名前を受け取って挨拶文を返すメソッド

次は、名前を受け取って挨拶文を返すメソッドです。

C#
string CreateGreeting(string name)
{
return "こんにちは、" + name + "さん";
}

使い方です。

C#
string greeting = CreateGreeting("山田");
Console.WriteLine(greeting);

実行結果は次の通りです。

C#
こんにちは、山田さん

文字列を組み立てて返す場合も、returnを使います。

9-3. 点数によって合格・不合格を返すメソッド

点数が60点以上なら"合格"、それ以外なら"不合格"を返すメソッドです。

C#
string Judge(int score)
{
if (score >= 60)
{
return "合格";
}

return "不合格";
}

使い方です。

C#
Console.WriteLine(Judge(80));
Console.WriteLine(Judge(45));

実行結果は次のようになります。

C#
合格
不合格

条件分岐とreturnを組み合わせる基本的な練習です。

9-4. 配列の合計値を返すメソッド

配列の中にある数値を合計して返すメソッドです。

C#
int SumArray(int[] numbers)
{
int total = 0;

foreach (int number in numbers)
{
total += number;
}

return total;
}

使い方です。

C#
int[] scores = { 70, 80, 90 };
int total = SumArray(scores);

Console.WriteLine(total);

実行結果は次の通りです。

C#
240

ループで計算した結果を、最後にreturnで返しています。

9-5. よくある間違いを修正する練習

次のコードには間違いがあります。

C#
int GetNumber(bool flag)
{
if (flag)
{
return 10;
}
}

このコードは、flagfalseの場合に値を返していません。そのため、エラーになります。

修正例です。

C#
int GetNumber(bool flag)
{
if (flag)
{
return 10;
}

return 0;
}

次のコードも間違いです。

C#
void ShowName()
{
return "田中";
}

voidメソッドでは値を返せません。値を返したいなら、戻り値の型をstringにします。

C#
string GetName()
{
return "田中";
}

処理をするだけなら、returnで値を返さずに表示します。

C#
void ShowName()
{
Console.WriteLine("田中");
}

間違いを修正するときは、「戻り値の型」「すべての条件で値を返しているか」「voidで値を返していないか」を確認しましょう。

10. C#のreturn文に関するよくある質問

10-1. returnは必ず書く必要がある?

戻り値があるメソッドでは、基本的にreturnが必要です。

C#
int GetNumber()
{
return 10;
}

intstringboolなどを返すメソッドでは、すべての処理経路で値を返す必要があります。

一方、voidメソッドでは、最後のreturn;は必須ではありません。

C#
void Show()
{
Console.WriteLine("Hello");
}

このように、処理が最後まで進むと自動的にメソッドは終了します。

ただし、途中で処理を終了したい場合はreturn;を書きます。

C#
void Show(string text)
{
if (text == "")
{
return;
}

Console.WriteLine(text);
}

10-2. returnを複数書いてもよい?

C#では、1つのメソッド内に複数のreturnを書いても問題ありません。

C#
string CheckNumber(int number)
{
if (number > 0)
{
return "正の数";
}

if (number < 0)
{
return "負の数";
}

return "ゼロ";
}

条件によって返す値を変えたい場合、複数のreturnを書くとわかりやすくなることがあります。

ただし、数が多すぎると読みにくくなる場合もあります。処理が複雑なときは、メソッドを分けたり、switch式を使ったりして整理しましょう。

10-3. voidでもreturnは使える?

voidメソッドでもreturnは使えます。ただし、値を返すことはできません。

使えるのは次のようなreturn;だけです。

C#
void Print(string text)
{
if (text == "")
{
return;
}

Console.WriteLine(text);
}

次のように値を返すとエラーになります。

C#
void Print()
{
return 10;
}

voidでは「処理を終了するためのreturn」は使えるが、「値を返すreturn」は使えない、と覚えましょう。

10-4. returnと戻り値は同じ意味?

returnと戻り値は、関係はありますが同じ意味ではありません。

returnは、値を返すための文です。

C#
return 10;

戻り値は、メソッドから実際に返される値です。

C#
int GetNumber()
{
return 10;
}

この例では、return 10;によって返される10が戻り値です。

つまり、returnは「返す命令」、戻り値は「返される値」と考えるとわかりやすいです。

10-5. return nullはどんなときに使う?

return nullは、参照型の戻り値で「返す値がない」ことを表したい場合に使われます。

C#
string FindName(int id)
{
if (id == 1)
{
return "田中";
}

return null;
}

この例では、idが1なら"田中"を返し、それ以外ならnullを返します。

ただし、nullを返す場合は、呼び出し側でnullチェックを行う必要があります。

C#
string name = FindName(2);

if (name == null)
{
Console.WriteLine("名前が見つかりません");
}
else
{
Console.WriteLine(name);
}

return nullは便利ですが、nullチェックを忘れるとエラーの原因になることがあります。C#ではnullable参照型を使う場合、string?のようにnullの可能性を型で表すこともあります。

C#
string? FindName(int id)
{
if (id == 1)
{
return "田中";
}

return null;
}

nullを返す可能性がある場合は、呼び出し側が安全に扱えるように設計することが大切です。

まとめ

C#のreturn文は、メソッドの処理を終了したり、戻り値を呼び出し元に返したりするために使う基本的な文法です。

戻り値があるメソッドでは、return 値;の形で値を返します。

C#
int Add(int a, int b)
{
return a + b;
}

voidメソッドでは戻り値を返せませんが、処理を途中で終了するためにreturn;を書くことはできます。

C#
void Show(string text)
{
if (text == "")
{
return;
}

Console.WriteLine(text);
}

return文を使うときは、次の点を意識しましょう。

戻り値の型とreturnする値の型を合わせること、戻り値があるメソッドではすべての処理経路で値を返すこと、voidメソッドでは値を返さないこと、そしてreturnの後の処理は実行されないことです。

C#のreturn文は、メソッドを理解するうえで欠かせない重要な文法です。計算結果を返す、文字列を返す、条件によってtruefalseを返す、処理を早期終了するなど、さまざまな場面で使われます。

最初は「戻り値の型」と「returnで返す値」を対応させることを意識しながら、簡単なメソッドを作って練習していきましょう。