2021年12月08日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説! total 676 count

return: メソッドの実行結果を伝えよう

Written By: 川俣 晶連絡先

この章のテーマ §

 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);

}

  1. 0
  2. 3
  3. 3 2 1
  4. 1 2 3
  5. エラーになり実行できない

[[解答]]

単行本情報