関数(function)を理解しよう!

[C#] 関数(function)を理解しよう!

※ 当サイトは広告を含みます。

ここではC#の関数について学びます。

関数 (function)

関数とは、同一の処理を1機能としてまとめ、いつでも呼び出しできるようにする機能です。

例えばコードに同じような記述が10回ある場合、同じコードを10回書くのは非効率です。
こういった場合に該当するコードを関数化して、いつでも呼び出せるようにします。

ちなみに、厳密にはC#に関数は存在せず、それよりも強化された仕組みとしてメソッドが存在します。
メソッドは必ずクラスに属する必要があるのですが、今はそこまでの知識は必要なく、関数という理解で構いません。

関数を定義する方法

定義自体は難しくありません。必ずclass配下に属する必要があるので、記述場所は気をつけましょう。
では、構文とサンプルコードを確認していきましょう。特に実行結果が大切なので必ず実行してください。

関数

今回は引数で与えられた数値を全て足す関数を作ります。


namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine(Sum(1, 2, 3));
      Console.WriteLine(Sum(10, 20, 30));
      Console.WriteLine(Sum(100, 200, 300));
    }

    // Sum関数を定義する
    static int Sum(int x, int y, int z)
    {
      int sum = x + y + z;

      return sum; // 戻り値
    }
  }
}

このように数値を足し合わせる部分はSum関数内にしかコードが存在しません。
それなのに3回分の表示ができてますね。これが関数の機能です。

では、この後は関数の定義で重要な引数や戻り値について解説します。
その中で頭に付くstaticですが、今の知識では説明できないので、何となく記述するくらいの理解で大丈夫です。

関数名

関数も変数のように名前を付けることができ、名前付けのルールは変数と同じです。
また、この名前を利用して呼び出すので、名前から機能が判断できると素晴らしいです。

関数名

POINT関数には機能が分かる名前を付けよう。

引数 (parameters|argument)

引数とは関数に与える変数です。ここに記述した引数は、そのまま関数内で利用できる変数になります。
記述は変数宣言と同じく、型と名前が必要です。また、複数の引数を付ける場合は,(カンマ)で区切ります。

引数
りさ
りさ

引数がない場合はどうしたらいいですか?

管理人
管理人

int Sum() みたいに引数を1つも書かなければいいんだよ。

戻り値 (return value)

戻り値とは関数が返す値です。先程の例で次の部分に注目しましょう。


Console.WriteLine(Sum(1, 2, 3));

ここでSum関数から戻り値が発生することで、画面に数値が表示されてます。
このように関数は必要に応じて戻り値を返す必要があります。

そして、この戻り値は、関数の定義で書いてる戻り値の型と同じである必要があります。
違う場合はビルドエラーとなり、実行することはできません。

また、戻り値を返す方法ですが、これにはreturnを利用します。関数を即時抜けて処理を終わらせる構文ですね。

このreturnには値を返す機能も備わっていて、同時に記述した値を関数から返すことができます。

戻り値
りさ
りさ

戻り値がない場合があり得ると思うのですが、どう書いたらいいですか?

管理人
管理人

その場合は戻り値の型をvoidと記述するんだ。後は関数自体が戻り値を返さない作りにすればOK。

戻り値 (void)

関数を呼び出す方法

作成した関数はこのように呼び出します。


関数名(引数)

この時の引数には、関数定義で記述した数と同じ数の引数を記述する必要があります。
なお、呼び出し時は型の記述は不要です。仮に引数がint型なら数値を書くか、int型の変数を書けばいいです。


Sum(100, 200, 300)

また、関数に戻り値がある場合は次のように代入することもできます。


変数 = 関数名(引数)

他にも、引数名を任意の順番で記述できる呼び出し方法もあります。

練習問題

問題1

引数で与えられた値(int型)の2乗を返すPower関数を作ってください。

クリックして解答例を見る。

namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine(Power(2));
      Console.WriteLine(Power(4));
      Console.WriteLine(Power(-6));
    }

    static int Power(int x)
    {
      return x * x;
    }
  }
}

問題2

円の半径を引数(実数)で与えると、その円の面積を返すCircleArea関数を作成してください。
この時の円周率は3.14を使い、引数で与える値による実数の誤差は無視していいです。

クリックして解答例を見る。

namespace Sample
{
  internal class Program
  {
    const double Pi = 3.14;

    static void Main(string[] args)
    {
      Console.WriteLine(CircleArea(3d));
      Console.WriteLine(CircleArea(3.589d));
      Console.WriteLine(CircleArea(128.002d));
    }

    static double CircleArea(double r)
    {
      return r * r * Pi;
    }
  }
}

あとがき

今回は関数について最低限の知識を学習しました。もっと深い知識はメソッド、つまりはクラスと一緒に学びましょう。
ちなみに度々利用してるConsole.WriteLine()も立派な関数ですよ。これは標準出力に文字列を表示する関数ですね。

◆ C#に関する学習コンテンツ

この記事は参考になりましたか?

関連記事

コメント

この記事へのコメントはありません。