ここではC#の関数について学びます。
関数 (function)
関数とは、同一の処理を1機能としてまとめ、いつでも呼び出しできるようにする機能です。
例えばコードに同じような記述が10回ある場合、同じコードを10回書くのは非効率です。
こういった場合に該当するコードを関数化して、いつでも呼び出せるようにします。
ちなみに、厳密にはC#に関数は存在せず、それよりも強化された仕組みとしてメソッドが存在します。
メソッドは必ずクラスに属する必要があるのですが、今はそこまでの知識は必要なく、関数という理解で構いません。
ここではC#のクラスについて学びます。クラスはC#において最も大切な機能だと思ってます。それもあって最低限の内容を書いたつもりが、何かめっちゃ長くなりました。疲れたら数回に分けて読んでください。クラス(class)クラスとは特定の機能を1つにまとめたものです。正直、説明が難しいのでコードを使って話します。最初に以下の記述方法とサンプルコードを見てください。これは車という機能をクラス化したコードです。// クラス public class Car { ...
関数を定義する方法
定義自体は難しくありません。必ず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ですが、今の知識では説明できないので、何となく記述するくらいの理解で大丈夫です。
ここではC#のstaticについて学びます。staticstaticは静的クラスや静的メンバを作成する時に利用します。実はサンプルで既に利用していて、Main関数がstatic宣言されてます。static void Main(string[] args)では、このstaticは何を意味するのでしょうか? 静的とは「動かない」とか「一定」と言う意味らしいです。より簡単に言うと、staticを付けたクラスやメソッドはアプリケーションで1つだ...
関数名
関数も変数のように名前を付けることができ、名前付けのルールは変数と同じです。
また、この名前を利用して呼び出すので、名前から機能が判断できると素晴らしいです。
POINT関数には機能が分かる名前を付けよう。
引数 (parameters|argument)
引数とは関数に与える変数です。ここに記述した引数は、そのまま関数内で利用できる変数になります。
記述は変数宣言と同じく、型と名前が必要です。また、複数の引数を付ける場合は,(カンマ)で区切ります。
引数がない場合はどうしたらいいですか?
int Sum() みたいに引数を1つも書かなければいいんだよ。
戻り値 (return value)
戻り値とは関数が返す値です。先程の例で次の部分に注目しましょう。
Console.WriteLine(Sum(1, 2, 3));
ここでSum関数から戻り値が発生することで、画面に数値が表示されてます。
このように関数は必要に応じて戻り値を返す必要があります。
そして、この戻り値は、関数の定義で書いてる戻り値の型と同じである必要があります。
違う場合はビルドエラーとなり、実行することはできません。
また、戻り値を返す方法ですが、これにはreturnを利用します。関数を即時抜けて処理を終わらせる構文ですね。
ここではC#のJump(break, continue, return, goto)構文について学びましょう。ただし、goto構文だけは特殊なので別枠で解説します。Jump statement (ステートメント)その名前の通り別の位置にジャンプしたり処理を抜けるための構文です。実はこれ、すでに半分は学習済みです。では、順番に見てみましょう。break statement (ステートメント)switch文やfor文を抜けるために使いましたよね。...
このreturnには値を返す機能も備わっていて、同時に記述した値を関数から返すことができます。
戻り値がない場合があり得ると思うのですが、どう書いたらいいですか?
その場合は戻り値の型をvoidと記述するんだ。後は関数自体が戻り値を返さない作りにすればOK。
関数を呼び出す方法
作成した関数はこのように呼び出します。
関数名(引数)
この時の引数には、関数定義で記述した数と同じ数の引数を記述する必要があります。
なお、呼び出し時は型の記述は不要です。仮に引数がint型なら数値を書くか、int型の変数を書けばいいです。
Sum(100, 200, 300)
また、関数に戻り値がある場合は次のように代入することもできます。
変数 = 関数名(引数)
他にも、引数名を任意の順番で記述できる呼び出し方法もあります。
ここでは少し特殊な引数の指定方法について学びます。引数なのでメソッド(関数)で利用する知識ですが、知らなくても困らない気もします。名前付き引数(Named arguments)これはメソッドに引数を与える時に各引数を名前を利用して指定します。正直、サンプルコード見てもらったほうが早いと思います。namespace Sample { internal class Display { public void Output(string nam...
練習問題
せっかくなので簡単な練習問題を考えました。次の条件を満たす関数を作ってください。
問題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#に関する学習コンテンツ
この記事は参考になりましたか?
コメント