C#のメソッドの引数と戻り値とは?Studentクラスで理解しよう

広告

前回の記事「C#のメソッドとは?StudentクラスのShowScore()から理解しよう」では、処理に名前を付けて呼び出す方法を学びました。

今回は、その続きとして引数戻り値を学びます。

引数と戻り値を使えるようになると、メソッドの外から値を渡したり、メソッドの処理結果を受け取ったりできるようになります。

前回のShowScoreメソッドを振り返る

前回は、Studentクラスの中に次のメソッドを作りました。

public void ShowScore()
{
    Console.WriteLine($"{Name}さんの点数は{Score}点です。");
}

呼び出すときは、次のように書きます。

student1.ShowScore();

このメソッドは、外から値を受け取らず、呼び出し元へ結果を返しません。丸かっこの中が空なので引数なしvoidなので戻り値なしのメソッドです。

引数と戻り値のイメージ

メソッドを小さな処理装置として考えてみましょう。

値を渡す → メソッドが処理する → 結果を返す
   引数                         戻り値

引数はメソッドへ渡す値、戻り値はメソッドから返される値です。すべてのメソッドに両方が必要なわけではありません。目的に応じて、引数だけを使ったり、戻り値だけを使ったり、両方を使ったりします。

引数60をIsPassedメソッドへ渡し、戻り値trueを受け取る流れ
引数はメソッドへ渡す値、戻り値はメソッドから返される値です。

引数を使って合格点を渡す

まずは、引数を使うメソッドを作ります。合格点を外から受け取り、合格か不合格かを表示するShowResultメソッドです。

public void ShowResult(int passingScore)
{
    if (Score >= passingScore)
    {
        Console.WriteLine($"{Name}さんは合格です。");
    }
    else
    {
        Console.WriteLine($"{Name}さんは不合格です。");
    }
}

この部分に注目してください。

int passingScore

passingScoreには、呼び出す側から渡された合格点が入ります。型はintなので、整数を受け取ります。

引数のあるメソッドを呼び出す

合格点を60点にする場合は、次のように呼び出します。

student1.ShowResult(60);

丸かっこの中に書いた60が、passingScoreへ入ります。

student1.ShowResult(60);
                    ↓
          passingScoreに60が入る

student1の点数が80点なら、80 >= 60は成立するので「田中さんは合格です。」と表示されます。

student1.ShowResult(60)の60がpassingScoreに入り、Score 80と比較されて合格になる流れ
呼び出し側の60がpassingScoreへ入り、student1のScoreと比較されます。

引数を使うメリット

引数を使うと、呼び出すときに条件を変えられます。

student1.ShowResult(60);
student1.ShowResult(90);

同じstudent1でも、合格点が60点なら合格、90点なら不合格です。メソッドを作り直さなくても、渡す値によって処理を変えられます。

「引数」と「パラメーター」の違い

初学者向けの説明では、どちらもまとめて「引数」と呼ばれることがあります。厳密には、メソッドを作る側のpassingScore仮引数(パラメーター)、呼び出す側の60実引数と呼びます。

// passingScoreは仮引数
public void ShowResult(int passingScore)

// 60は実引数
student1.ShowResult(60);

まずは「丸かっこの中を使って、メソッドへ値を渡せる」と理解できれば大丈夫です。

戻り値を返すメソッド

次は、メソッドから値を返してみましょう。生徒の点数を返すGetScoreメソッドを作ります。

public int GetScore()
{
    return Score;
}

前回のShowScore()ではvoidを使いましたが、今回はintになっています。

public int GetScore()

これは「int型の値を返すメソッド」という意味です。そして、値を返すときに使うのがreturnです。

return Score;

戻り値を受け取る

GetScore()が返した値は、変数に入れて使えます。

int result = student1.GetScore();
Console.WriteLine(result);

student1のScoreが80なら、処理の流れは次のようになります。

student1.GetScore()を呼び出す
        ↓
return Score;で80を返す
        ↓
resultに80が入る

戻り値は、変数に入れるだけでなく、条件式や別のメソッドの引数として使うこともできます。

voidとの違い

voidは、呼び出し元へ値を返さないという意味です。

public void ShowScore()
{
    Console.WriteLine(Score);
}

一方、戻り値の型にintを書いたメソッドは、int型の値を返す必要があります。

public int GetScore()
{
    return Score;
}

ShowScore()は表示まで行うメソッド、GetScore()は値を返して使い方を呼び出し側へ任せるメソッドです。

引数と戻り値を組み合わせる

最後に、引数と戻り値の両方を使います。指定された合格点以上かどうかを判定するIsPassedメソッドを作りましょう。

public bool IsPassed(int passingScore)
{
    return Score >= passingScore;
}

このメソッドには、次の4つのポイントがあります。

  • int passingScoreで合格点を受け取る
  • Score >= passingScoreで点数を比較する
  • bool型の結果を返す
  • returntrueまたはfalseを返す
IsPassedメソッドがScore 80とpassingScore 60を比較し、trueをbool resultへ返す流れ
IsPassed()は比較結果のtrueを返し、呼び出し側のbool resultが受け取ります。

IsPassedメソッドを呼び出す

bool result = student1.IsPassed(60);

if (result)
{
    Console.WriteLine("合格です。");
}
else
{
    Console.WriteLine("不合格です。");
}

student1の点数が80点なら、student1.IsPassed(60)の戻り値はtrueです。そのため「合格です。」と表示されます。

変数を使わず、戻り値をそのままif文の条件にすることもできます。

if (student1.IsPassed(60))
{
    Console.WriteLine("合格です。");
}

完成したコード

using System;

namespace StudentClassTutorial
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Student student1 = new Student();
            student1.Name = "田中";
            student1.Score = 80;

            student1.ShowScore();
            student1.ShowResult(60);

            int score = student1.GetScore();
            Console.WriteLine($"取得した点数: {score}");

            bool result = student1.IsPassed(60);

            if (result)
            {
                Console.WriteLine("合格です。");
            }
            else
            {
                Console.WriteLine("不合格です。");
            }
        }
    }

    class Student
    {
        public string Name;
        public int Score;

        public void ShowScore()
        {
            Console.WriteLine($"{Name}さんの点数は{Score}点です。");
        }

        public void ShowResult(int passingScore)
        {
            if (Score >= passingScore)
            {
                Console.WriteLine($"{Name}さんは合格です。");
            }
            else
            {
                Console.WriteLine($"{Name}さんは不合格です。");
            }
        }

        public int GetScore()
        {
            return Score;
        }

        public bool IsPassed(int passingScore)
        {
            return Score >= passingScore;
        }
    }
}

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

田中さんの点数は80点です。
田中さんは合格です。
取得した点数: 80
合格です。

よくある間違い

引数を渡し忘れる

// passingScoreが必要なのでエラー
student1.IsPassed();

// 正しい呼び出し
student1.IsPassed(60);

引数の型を間違える

// intを受け取るメソッドに文字列は渡せない
student1.IsPassed("60");

戻り値の型とreturnする値が違う

public bool IsPassed(int passingScore)
{
    // boolを返すメソッドなのでintは返せない
    return Score;
}

戻り値があるのにreturnを書かない

戻り値の型がvoid以外なら、その型に合う値を返す必要があります。

public int GetScore()
{
    return Score;
}

メソッド名から役割を読み取ろう

メソッド名には、その役割が分かる名前を付けることが大切です。

  • ShowScore():点数を表示する
  • GetScore():点数を取得する
  • IsPassed():合格しているかを調べる

Isから始まる名前は、trueまたはfalseを返すメソッドによく使われます。IsPassed()という名前を見るだけで、「合格しているかどうかを返すのだな」と予想できます。

まとめ

引数と戻り値を使うと、メソッドをさらに柔軟な部品として使えるようになります。

  • 引数は、メソッドへ渡す値
  • 戻り値は、メソッドから返される値
  • 引数はメソッド名の後ろの丸かっこに書く
  • 戻り値の型はメソッド名の前に書く
  • returnを使って値を返す
  • voidは値を返さない
  • 引数と戻り値は同じメソッドで組み合わせられる
public bool IsPassed(int passingScore)
{
    return Score >= passingScore;
}

このコードを見て、「合格点を受け取り、合格しているかどうかを返すメソッド」と読めれば、引数と戻り値の基本は理解できています。

訪問数 7 回, 今日の訪問数 7回

広告

C#,メソッド,初学者

Posted by hidepon