この章のテーマ §
return文(ステートメント)を学習します。return文にはメソッドの実行を終了するという機能と、メソッドの戻り値を指定するという機能の2つがあります。
前提知識 §
Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, 条件演算子, int型, if文, メソッドの基礎, ラムダ式の基礎
解説 §
return文には2つの機能があります。
- メソッドやラムダ式などをその場で終了させる
- メソッドやラムダ式などの戻り値を指定する
しかし、使い分けは単純ではありません。
戻り値の型がvoidの場合は、単に終了させたい場所にreturn;と書くだけです。メソッドの終わりには書く必要はありません。もう終わりになるのは明確だからです。
ところが、戻り値の型がvoid以外の場合は、メソッドを終了する全ての箇所にreturn 式;という文を書く必要があります。戻り値を指定しないで終了することはできないからです。
罠の数々 §
- たとえループの中で使ってもreturn文を実行した時点で、即座にメソッドを終了させてしまう。ループの残りは永遠に実行されない
- ラムダ式などの中でretun文を使ってもラムダ式を終了させるだけでメソッドは終了しない
- return文の後に書ける式は、戻り値の型として指定した型のみ。返す値がないときも、何かの値は返さねばならない
- 他にyield return文という似て非なる文があるので注意しよう
参考リンク §
return (C# リファレンス)
サンプルソース: kw_return §
var a = sub2(1);
sub1(a);
var b = sub2(2);
sub1(b);
void sub1(int x)
{
if (x == 0)
{
Console.WriteLine("ありません。");
return;
}
Console.WriteLine($"{x}個あります。");
}
int sub2(int number)
{
if (number == 1)
{
return 0;
}
return 100;
}
実行結果 §
ありません。
100個あります。
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
以下のプログラムの実行結果を予測してみよう。
x(3);
int x(int y)
{
if( y == 0 ) return 0;
Console.Write($"{y} ");
return x(y - 1);
}
- 0
- 3
- 3 2 1
- 1 2 3
- エラーになり実行できない
[[解答]]