CodeGym /コース /C# SELF /戻り値とreturn演算子

戻り値とreturn演算子

C# SELF
レベル 8 , レッスン 3
使用可能

1. はじめに

想像してみて:電話(もしくはアプリ、今は21世紀だしね)でピザを注文する。オペレーターに注文内容を伝えると、オペレーターは結果としてピザを返してくれる!もしオペレーターが無言だったら…お腹すいたままだし、幸せも来ないよね。

関数も同じで、時には何かアクションを実行するだけだけど、よく「何か役立つもの」を返してほしい時がある。その結果は入力によって毎回違うこともある!例えば:

  • 関数が2つの数字の合計を計算して結果を返す。
  • 関数が人の年齢を受け取ってカテゴリ("子供", "大人", "年金受給者")を返す。
  • 関数がユーザー名で素敵な挨拶文を作る。

戻り値は、関数が自分の処理結果を「外に渡す」方法だよ。

2. 戻り値ありメソッドのシグネチャ

前回の講義でこんなテンプレートを見たよね:

void PrintHello()
{
    Console.WriteLine("こんにちは!");
}
戻り値なしメソッド( void

void型は、関数が何も返さないことを意味する(voidは「空っぽ」、値がないってこと)。

じゃあ、何かを返す関数はどう書くのか見てみよう:

int Add(int a, int b)
{
    // 関数の本体
}
戻り値ありメソッド( int

ここでintは関数名の前に書いてあって、これは戻り値のデータ型だよ。もし関数が文字列を返すならstring、小数ならdouble、みたいな感じ。

関数宣言のシンタックスはこうなる:

<戻り値の型> メソッド名(<パラメータ>)
{
    // 関数の本体
}
戻り値ありメソッドの一般的なテンプレ

いろんなシグネチャ例:

シグネチャ 何を返すか
int Sum(int a, int b)
整数
string GetGreeting(string name)
文字列
double Multiply(double x, double y)
小数
bool IsAdult(int age)
論理値

3. return演算子:関数から結果を返す方法

ちゃんと動かすには、型を指定するだけじゃダメで、関数に「結果を上に返す」ことを教えなきゃいけない。そのために使うのがreturn演算子(return。これで「はい、この値を返すよ」って伝えて、その瞬間に関数の実行が終わる(この時点で「外」に出るイメージ)。

 メソッド名(...)
{
    // なんか計算
    return ;
}
returnの使い方イメージ

例:

int Add(int a, int b)
{
    int sum = a + b;
    return sum; // 計算結果を返す
}

大事なルール: returnで返す値の型は、メソッドのシグネチャで指定した型と完全に一致(もしくは互換性あり)じゃないとダメ。

4. 例:何かを返すメソッドを書いてみよう

さっそく例で確認しよう!よくあるパターンをいくつか見てみるね。

例1:2つの数字を足す

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

// 使い方:
int result = Add(10, 20);
Console.WriteLine("合計: " + result); // 出力: 合計: 30

例2:個別の挨拶

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

// 使い方:
string greeting = CreateGreeting("アンナ");
Console.WriteLine(greeting); // 出力: こんにちは、アンナ!

例3:成人かどうかチェック

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

if (IsAdult(21))
{
    Console.WriteLine("入場OK。");
}
else
{
    Console.WriteLine("ごめん、大人だけだよ。");
}
// 出力: 入場OK。

例4:戻り値を式で使う

Console.WriteLine("2倍: " + MultiplyByTwo(7));

int MultiplyByTwo(int n)
{
    return n * 2;
}

5. 戻り値の型:バリエーションと特徴

C#では、関数は「型」なら何でも返せる(数字や文字列だけじゃないよ)。例えば:

  • 整数型: int, long, short — シンプルだね。
  • 小数型: double, float, decimal
  • 文字列型: string
  • ブール型: bool
  • 配列: int[], string[]など。
  • 参照型: 自作クラスのオブジェクトなど。
  • void: 何も返さない特別なケース。

なぜ戻り値の型がそんなに大事なの?

コンパイラは「約束したものをちゃんと返してるか」めっちゃ厳しくチェックする。intを返すって言ってるのに文字列や何も返さなかったらエラー。まるで厳しい上司みたい。

エラー例:

int GetNumber()
{
    return "42"; // エラー!intが期待されてるのにstringを返してる。
}

6. 値なしreturn演算子:voidメソッドの場合

ちなみに、戻り値あり(例えばintstring)のメソッドでは、returnには必ず返したい値をセットしなきゃダメ。

でも!関数がvoid型なら、returnを値なしで使ってもOK。これで即座に関数の実行を終わらせられる。

void PrintNumbers(int n)
{
    if (n <= 0)
    {
        Console.WriteLine("数字はマイナスじゃダメだよ!");
        return; // 何も返さずに関数から抜ける
    }
    for (int i = 1; i <= n; i++)
    {
        Console.WriteLine(i);
    }
}
return(値なし)を voidメソッドで使う例

条件によって関数の実行を中断したいけど、何も返す必要がない時に便利だよ。

7. returnでよくあるミス

ああ、初心者プログラマーがreturnで頭を抱えること、めっちゃ多いんだよね!

問題1: 返すべき関数なのにreturnがない

int GetValue(bool flag)
{
    if (flag)
        return 1;
    // あれ?flag == falseの時は?
}
// エラー: すべてのコードパスでreturnが必要!

解決法: どんな場合でもreturnが実行されるようにしよう!例えば:

int GetValue(bool flag)
{
    if (flag)
        return 1;
    else
        return 0;
}

問題2: 戻り値の型が合ってない

double GetMagicNumber()
{
    return 42; // 実はOK(intはdoubleに暗黙変換できる)
    // でももしintを返す関数でstringを返したらエラー!
}

ルール: 型の互換性に注意しよう。迷ったら明示的に型変換してもいい:

return (double)42;

問題3: 早すぎるreturn

returnが実行された瞬間、メソッドの処理は即終了。それ以降のコードは絶対に実行されない!

int GetNumber()
{
    return 5;
    Console.WriteLine("この行は絶対に実行されない"); // コンパイラも怒る!
}

問題4: voidメソッドで値を返そうとする(禁止!)

void PrintSomething()
{
    return 1; // voidメソッドで値を返すのはダメ!
}
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION