第3章: C#のメソッドと関数

メソッド(Method)は、C#における関数の一種で、特定のタスクを実行するコードのまとまりです。メソッドはコードの再利用性を高め、コードの見通しを良くし、保守性を向上させます。この章では、メソッドの宣言方法と呼び出し、引数と戻り値の使い方、さらにオーバーロードや再帰の概念を説明していきます。


1. メソッドの宣言と呼び出し

C#でメソッドを宣言する基本的な構文は以下の通りです。

アクセス修飾子 戻り値の型 メソッド名(パラメータリスト)
{
// メソッドの処理
}
  • アクセス修飾子: メソッドのアクセス範囲を指定します。publicprivateprotectedinternal などのキーワードがあります。publicはメソッドをどこからでも呼び出せるようにし、privateはクラス内部からのみアクセス可能にします。
  • 戻り値の型: メソッドが返すデータの型を指定します。intstringboolなどの型や、データを返さない場合はvoidを指定します。
  • メソッド名: メソッドを識別するための名前です。キャメルケースで命名するのが一般的です。
  • パラメータリスト: メソッドが受け取る引数を指定します。引数がない場合は()だけを記述します。
例: 基本的なメソッド宣言と呼び出し

次に、整数を引数として受け取り、その数を2倍にして返すメソッドを例に解説します。

public int DoubleNumber(int number)
{
int result = number * 2;
return result;
}

このメソッドはDoubleNumberという名前で、引数としてint numberを受け取り、その値を2倍にして返します。

次に、このメソッドを呼び出すには以下のようにします。

int result = DoubleNumber(5);
Console.WriteLine(result); // 出力: 10

DoubleNumber(5)を呼び出すと、5が2倍されて10が返り、resultに代入されます。このようにメソッドを定義し、必要に応じて呼び出すことで、コードの再利用が可能になります。


2. 引数と戻り値

メソッドの引数(Parameter)と戻り値(Return Value)は、メソッドの柔軟性と機能性を高めます。

引数

引数は、メソッドに入力データを渡す手段です。複数の引数を持つことができ、引数が多い場合はコンマで区切って指定します。

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

Addメソッドは、2つの整数引数abを受け取り、その合計を返します。

int sum = Add(3, 7);
Console.WriteLine(sum); // 出力: 10
戻り値

戻り値は、メソッドが呼び出し元に返すデータです。戻り値が必要ない場合は、voidを指定して何も返さないメソッドにすることができます。

public void DisplayMessage()
{
Console.WriteLine("Hello, World!");
}

DisplayMessageメソッドは戻り値がないので、単に「Hello, World!」と出力します。

DisplayMessage(); // 出力: Hello, World!

3. オーバーロード(Overload)

メソッドのオーバーロードとは、同じ名前のメソッドを異なる引数で複数定義することです。C#では、引数の型や数が異なれば、同じ名前のメソッドを定義することができます。

例: メソッドのオーバーロード
public int Multiply(int a, int b)
{
return a * b;
}

public double Multiply(double a, double b)
{
return a * b;
}

上記の例では、整数を引数とするMultiplyメソッドと、浮動小数点数を引数とするMultiplyメソッドが定義されています。呼び出す際の引数の型に応じて、適切なメソッドが自動的に選ばれます。

int intResult = Multiply(2, 3); // 整数型のMultiplyが呼ばれる
Console.WriteLine(intResult); // 出力: 6

double doubleResult = Multiply(2.5, 4.0); // 浮動小数点型のMultiplyが呼ばれる
Console.WriteLine(doubleResult); // 出力: 10.0

オーバーロードを使うことで、異なる引数に対応したメソッドを用意でき、コードの可読性や柔軟性が向上します。


4. 再帰(Recursion)

再帰とは、メソッドが自分自身を呼び出すことで、繰り返し処理を行う手法です。再帰を使うと、複雑な繰り返し処理をシンプルに表現できますが、停止条件を設定しないと無限ループになるため注意が必要です。

例: 再帰による階乗計算

以下は、再帰を使用して階乗(Factorial)を計算するメソッドの例です。階乗とは、例えば5! = 5 * 4 * 3 * 2 * 1といったように、1からその数までのすべての整数を掛け合わせた値です。

public int Factorial(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * Factorial(n - 1);
}
}

このFactorialメソッドは、引数nが1以下のときに1を返します。それ以外の場合は、n * Factorial(n - 1)を計算します。これにより、Factorial(5)を呼び出すと以下のような再帰的な計算が行われます。

int result = Factorial(5);
Console.WriteLine(result); // 出力: 120

再帰処理の流れ:

  1. Factorial(5)が呼ばれ、5 * Factorial(4)に変換
  2. Factorial(4)が呼ばれ、4 * Factorial(3)に変換
  3. これが続き、最終的にFactorial(1)が1を返して停止
再帰の利点と注意点

再帰は、数式的な処理や探索アルゴリズムの実装でよく利用され、コードを簡潔に保つことができます。しかし、再帰の深さが深くなりすぎるとスタックオーバーフローが発生するリスクがあるため、場合によってはforwhileループに置き換えることも検討すべきです。


まとめ

メソッドはプログラムの機能をモジュール化するために欠かせない要素です。引数と戻り値の仕組み、メソッドのオーバーロードや再帰の概念を理解することで、C#でのプログラミングがよりスムーズに行えるようになります。


初心者におすすめ!プログラミングスクールのススメ

未経験でも気軽に!サブスク型プログラミングスクール【Freeks】

プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。

独学の挫折率、驚きの87.5%!

独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。

有料と無料、スクールの違いは?

プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:

  • 受講条件が異なる
  • 学べるスキルやカリキュラム内容が異なる
  • 就職や転職のサポート内容が異なる

どちらが自分に合っているか、よく考えて選ぶのが大事です。

サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!

プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:

  • 未経験者向けのわかりやすいカリキュラム
  • 経験豊富なエンジニアのサポート
  • オンラインで自分のペースで学習可能

なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。

終了後は副業もサポート!

カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

Related Post

第6章: C#の例外処理第6章: C#の例外処理

プログラムを実行中に発生する予期しないエラーや問題に対応するために、C#には例外処理という機能があります。例外処理を理解し、適切に活用することで、コードの信頼性と堅牢性を向上させることができます。ここでは、例外処理の基本 […]

第2章: C#の制御構造第2章: C#の制御構造

制御構造は、プログラムの実行フローを管理するための重要な要素です。制御構造を理解することで、特定の条件に応じて処理を分岐させたり、繰り返し実行したりすることが可能になります。この章では、C#で使用される主要な制御構造につ […]