voidメソッドにおけるreturn

前回のレッスンで少し触れましたが、戻り値型がvoidのメソッドでもreturnを記述することが可能です。

戻り値を持つメソッドにはreturn文の記述が必須です;

void戻り値なしメソッドはreturnの記述を強制されません

コードがメソッド末尾の}まで実行されると自動的に呼び出し元に戻り、データは渡されません。

しかし業務コードではメソッドを途中で終了したい場面がよくあります。voidメソッドでは引数なしのreturn;を使って即座に処理を抜けられます:

構文:return; (後ろに式を記述しない)

制限:voidと宣言されたメソッド内部でのみ使用可能

例:

    void SayHi()
    {
        Console.WriteLine("hello welcome to foxDevelop.com");
    }Code language: C# (cs)

こちらは先ほど紹介したサンプルで、最も単純なvoidメソッドです。内部にreturnは不要です。

このメソッドを呼び出すと内部のWritelineが実行され、「hello welcome to foxDevelop.com」が出力されます。

    static void Main()
    {
        Program program = new Program();
        program.SayHi();
    }

    void SayHi()
    {

        Console.WriteLine("hello welcome to foxdevelop.com");
    }Code language: C# (cs)

ここにreturn;を追加してみましょう。

    void SayHi()
    {
        return; // return文を単独で記述すると現在のメソッドの実行を終了します
        Console.WriteLine("hello welcome to foxdevelop.com");
    }Code language: C# (cs)

実行しても何も出力されません。return;がConsole.WriteLineより前にあるため、returnに到達した時点で呼び出し元へ処理が戻り、後続のコードは実行されません。これは早期終了という動作です。

return以降のコードは永久に実行されません。

つまりvoidメソッドでもreturn;は利用可能です。ただしreturnの後に値を記述する必要はありません。

    int Add(int a, int b)
    {
        return 100;
    }Code language: C# (cs)

void以外の型のメソッドではreturn 値;が必須となります。

returnの後には必ず結果を記述する必要があります。変数、リテラル(100や3.14といった値)、a+bのような式のいずれでも構いませんが、最終的に何らかの結果を返す必要があります。

結果を記述せずvoidと同じようにreturn;と書くとコンパイルエラーになります。

voidメソッドの複数出口return

    static void Main()
    {
        Program program = new Program();
        program.ShowMax(100,200);
    }

    void ShowMax(int a, int b)
    {
        if (a>b)
            Console.WriteLine($"{a}>{b}"); // 条件を満たしたらメソッドを即時終了

        if (b > a) 
            Console.WriteLine($"{b}>{a}");
    }Code language: C# (cs)

サンプルを見てみましょう:

class Program
{
    static void Main()
    {
        Program program = new Program();
        program.Greet();
    }

    private void Greet()
    {
        DateTime dt = DateTime.Now;
        if (dt.Hour < 12)
            return; // 12時前はそのまま終了、出力を行わない
        Console.WriteLine("Good afternoon!");
    }
}Code language: C# (cs)

現在時刻が12時を過ぎていれば午後の挨拶を出力し、そうでなければ出力をスキップして即座に戻ります。

voidメソッドにおけるreturn

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です